【码蚁君】AR实战-圣诞礼物EasyAR+Unity
文章目录
- AR实战-圣诞礼物[EasyAR+Unity]
- 一、准备工作
- 1.1 开发环境
- 1.2 打包工具
- 1.3 EasyAR注册
- 1.4 一个对象
- 二、Unity开发
- 2.1 新建工程
- 2.2 搭建场景Scene
- 2.3 配置License Key和云识别授权
- 配置License Key
- 配置云识别参数
- 2.4 初跑demo
- 2.5 编写脚本,控制模型
- 修改扫描后首次出现的模型
- 圣诞礼物盒添加点击事件
- 三、打包成可运行程序
AR实战-圣诞礼物[EasyAR+Unity]
hey yo,圣诞节又快到了,哎!又在为送什么礼物而头疼!!
当我准备打开淘宝搜“圣诞音乐盒”送给女盆友时,AR礼物成功引起了我的注意……
看这效果图!!卧槽!!酷炫吊炸天!!
她肯定会喜欢的!(?)
想学吗!码蚁君教你如何把AR圣诞礼物送给她!!
Demo项目下载地址:
https://pan.baidu.com/s/1LQVJJ8y5KAP45_wgzsi0Dw
提取码: 9m3q
一、准备工作
在开发前,需要准备一些环境,本案例用的是EasyAR+Unity。
1.1 开发环境
名称 | 版本 | 下载地址 |
---|---|---|
Easy AR | EasyARSense_3.0.1-final_Basic | EasyAR3.0.1官网下载 |
Unity | 中国增强版 2018.4.8c3 | Unity Hub中国增强版下载 |
1.2 打包工具
Unity有打包安卓apk的功能,但是前提是有Java开发环境和安卓的SDK,我这里用到的是java1.8,如果不会的请戳菜鸟教程-Java安装
1.3 EasyAR注册
因为要使用到EasyAR提供的AR云识别功能,所以首先需要注册一个新的账号,每个新账号可以免费使用一个月的云识别功能。
先到EasyAR官网注册一个账号,登录后点开发者中心,新建一个应用,获取License Key。
新建云识别图库,刚开始是免费一个月试用,够学习玩耍了~
该图库拿来上传你需要识别的目标卡片,当应用的摄像头拍到该物体就会回调会Unity的脚本里,后面会详细讲解~
新建完图库,得到了这三样东西,是调起AR Camera的必要参数:
- Cloud Key
- Cloud Secret
- Cloud URLs
1.4 一个对象
如果没有对象的话,可以关掉这个教程了!!不适合你!!
哼唧,开个玩笑!嘻嘻。
至此,准备工作已经全部做完啦~准备制作圣诞礼物啦!!
二、Unity开发
2.1 新建工程
打开Unity,新建一个3d工程,双击导入EasyAR的UnityPackage(EasyARSense_3.0.1-final_Basic.unitypackage).
然后把事先准备好的模型统统导进去!
DEMO内含模型有[\ar-gift\Assets\Resources],DEMO下载地址在最上面!!:
- HatsuneMikuModel(初音)
- KTK_Effect_Samples(粒子爆炸)
- ChristmasCustomizationBox(圣诞礼物)
【初音换成你喜欢的任何模型都可以~】
我不会告诉你最初我想捏一个这样的3d模型,可惜手法不行,捏得太丑了就放弃了。
什么???你问我为什么比中指??看清楚好吗!! 这是
(Fuck爆炸无敌)+(喜欢你)的意思!!哼!!
回归正题,导入完毕,目录结构如下:
2.2 搭建场景Scene
找到EasyAR提供的官方Sample,找到这个HelloAR_ImageTarget_Cloud.unity.
在项目根目录下,新建自己的Scene,把刚刚EasyAr场景下的所有组件复制到自己的场景中。
- Main Camera
- Directional Light
- EasyAR_Setup
- CloudRecognizer
2.3 配置License Key和云识别授权
配置License Key
把刚刚从EasyAR那得到的SDK License Key复制一下,粘贴到Assets/EasyAR/Common/Resources/EasyARKey.asset下
配置云识别参数
复制Cloud Key、Cloud Secret、Cloud URLs中的Client-end地址(因为应用是作为客户端)到场景中的CloudRecognizer组件中。
2.4 初跑demo
PC上运行应用需要有摄像头,如果是笔记本自带没问题,如果是台式机,可以像我一样,花了19块买了个超级渣的摄像头。
去云识别图库那上传一张目标识别卡片,这个宽度是指现实卡片的宽度,填个差不多的就行了。
回来Unity初跑一下demo,用摄像头拍着你的目标卡片,如果不出意外的话,会出现这个玩意儿。
如果出现了这个预设模型,已经成功了一半啦!!
2.5 编写脚本,控制模型
首先,思考一下,当你摄像头拍到目标卡片后,请求EasyAR服务,成功识别后,应该会回调到一个地方,初始化你的模型代码。
修改扫描后首次出现的模型
打开 /Assets/EasyAR/Scripts/CloudRecognizeBehaviour.cs 文件:
在Open方法下有初始化模型的代码,把它替换成圣诞礼物盒的模型路径。
现在再扫目标卡片,出现的就是圣诞礼物盒子啦!~
圣诞礼物盒添加点击事件
我也是刚学Unity,点击事件用的是最简单的,给GameObject添加Collider,然后监听OnMouseDown,可能也很多种方式添加点击事件哈!!
找到礼物盒的预设,点击打开,给礼物添加Box Collider Component。
【/Assets/Resources/ChristmasCustomizationBox/Gifts/Prefabs/Box01】
缩放成和盒子差不多大小,如图
新建脚本,/Assets/Scripts/GiftController.cs,编写点击礼物盒后的效果。
GiftController.cs代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;public class GiftController : MonoBehaviour
{void OnMouseDown(){//爆炸粒子效果1加载var explosion1 = Instantiate(Resources.Load("KTK_Effect_Samples/Prefab/Eff_Burst_2_oneShot", typeof(GameObject)) as GameObject);explosion1.transform.SetParent(this.transform.parent);explosion1.gameObject.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);explosion1.gameObject.transform.localPosition = new Vector3(0, 0, 0);explosion1.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);//爆炸粒子效果2加载var explosion2 = Instantiate(Resources.Load("KTK_Effect_Samples/Prefab/Eff_Heal_2_oneShot", typeof(GameObject)) as GameObject);explosion2.transform.SetParent(this.transform.parent);explosion2.gameObject.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);explosion2.gameObject.transform.localPosition = new Vector3(0, 0, 0);explosion2.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);//延迟1s销毁粒子Destroy(explosion1, 1f);Destroy(explosion2, 1f);//初音模型加载var hatsuneRumba = Instantiate(Resources.Load("HatsuneMikuModel/HatsuneRumbaPrefab", typeof(GameObject)) as GameObject);hatsuneRumba.transform.SetParent(this.transform.parent);hatsuneRumba.gameObject.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f);hatsuneRumba.gameObject.transform.localRotation = Quaternion.Euler(90, 180, 0);hatsuneRumba.gameObject.transform.localPosition = new Vector3(0, 0, 0);//二维码加载var wechatCode = Instantiate(Resources.Load("WechatCode/WechatCode", typeof(GameObject)) as GameObject);wechatCode.transform.SetParent(this.transform.parent);wechatCode.gameObject.transform.localScale = new Vector3(0.04f, 0.04f, 0.04f);wechatCode.gameObject.transform.localRotation = Quaternion.Euler(-90, 0, 0);wechatCode.gameObject.transform.localPosition = new Vector3(0.5f, 0, -0.5f);//隐藏箱子Destroy(this.transform.gameObject);}}
(我觉得礼物盒静止不动很丑,我自己添加了些动画在里面,所以会有个Animator在那)
把脚本添加到Box01预设上,大功告成!!运行扫描目标卡片,就会出现漂亮的圣诞礼物盒啦!
三、打包成可运行程序
Unity打包安卓,这里就不赘述啦!网上很多教程,简单来说步骤为:
Build Setting -> 切换成Android -> 填写好Package Name(这里的包名要和License Key那的包一样的名) -> Build
- 前提是已经有Java和安卓SDK的环境哦!
最后,我拿着我的手机,让女盆友去扫她的工牌,她说她很喜欢。
我很满意。
如果觉得有用好玩的话,关注码蚁君,更多好玩等着你~
【码蚁君】AR实战-圣诞礼物EasyAR+Unity相关推荐
- AR应用开发--EasyAR初体验(新手向)
作者:hwj3747 转载请注明 说明 随着智能化技术的火爆,可以预见:AR,VR,人工智能等技术将逐渐成为未来科技发展的潮流!但是这些技术的技术壁垒是相当高的,对于小白来说,难度着实太大,好在已经有 ...
- 《MapReduce 2.0源码分析与编程实战》一第1章 HBase介绍
本节书摘来异步社区<MapReduce 2.0源码分析与编程实战>一书中的第1章,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 一位小小码蚁工作2年多感想
从事开发4+2.5年的码蚁一直潜水在博客园,今天开始新的征程了,记录自己成长也是同别人分享其乐无穷. 工作2年多感想 1. 工作和生活分开 从2014年开始工作到现在,基本上一直处于忙碌的状态,时间基 ...
- 《MapReduce 2.0源码分析与编程实战》一1.5 看,大象也会跳舞
本节书摘来异步社区<MapReduce 2.0源码分析与编程实战>一书中的第1章,第1.5节,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公 ...
- 微信公众账号第三方平台全网发布源码(java)- 实战测试通过
微信公众账号第三方平台全网发布源码(java)- 实战测试通过 (更多资料,关注论坛:www.jeecg.org) 技术交流请加:289709451.287090836 package org.jee ...
- 《Android源码设计模式解析与实战》读书笔记(十三)
第十三章.备忘录模式 备忘录模式是一种行为模式,该模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态,有点像是我们平常说的"后悔药". 1.定义 在不破坏封闭的前提下,捕获 ...
- 手绘与码绘的比较——实战之梵高《星空》
手绘与码绘的比较--实战之梵高<星空> 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近博主的老师在交互媒体设计课上布置了一个作业,是关于"运动"主题的作品创 ...
- spring源码扩展点与实战(一)
前言 我们在使用 spring 框架的时候,有时候需要做一些定制化开发,这个时候就有必要对 spring 进行一些个性化扩展.spring 的代码本身就是一门艺术,可以非常方便进行扩展,但是有时候应用 ...
- 《MapReduce 2.0源码分析与编程实战》一1.6 本章小结
本节书摘来异步社区<MapReduce 2.0源码分析与编程实战>一书中的第1章,第1.6节,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公 ...
最新文章
- 用SNMP实现对大型网络的轻松管理!
- 01迷宫(BFS+记忆)
- 函数计算帮助石墨文档突破性能瓶颈,有效节省服务器成本
- rxjs of操作符里subscribeToArray的实现原理示意图及分析
- discuz集思街淘宝客模板
- 金三银四Java高级工程师面试题整理,2年以上经验必看
- League of Demacia(平面几何)
- 毕加索传记的艺术和历史
- 计算机二级考试用户名怎么查,计算机二级考试成绩查询方法与具体步骤
- java项目-第150期ssm网络视频播放器-java毕业设计_计算机毕业设计
- 解决微信App支付服务端,App上提示“商户支付下单id非法”
- 抖音聊天”上线,字节最后的社交梦?
- StrictMode.StrictMode$AndroidBlockGuardPolicy.onNetwork
- 讯搜 配置mysql_实例讲解帝国cms整合xunsearch(迅搜)教程
- 射频测试 —— 蓝牙定频测试1
- 数据分析的统计基础(下)
- 服务器硬盘数据丢了怎么恢复,服务器数据丢了怎么恢复
- 数据结构 树的基本介绍
- Android:隐藏虚拟键盘
- golang 模拟M/M/s排队系统损失率,泊松分布到达,指数分布服务