版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
15.1项目介绍随着这两年AR的兴起,市面上出现越来越多的AR应用,如AR卡片、AR涂涂乐、结合LBS技术的精灵宝可梦等。很多大公司也投入到了AR的领域,如苹果公司的ARKit、谷歌公司的ARCore等,正是有了这些公司,他们把AR技术进行了封装,让开发者可以很方便地制作自己的AR应用。本章将利用EasyARSDK来制作一个简单的AR应用。EasyAR是视辰信息科技(上海)有限公司自主研发的一款AR开发工具包,里面封装好了AR的接口,直接调用就可以实现AR功能。本章制作一个扫描图片,出现小红军的模型,可以跟小红军进行交互,让模型做一些动作,如图15.1所示。返回15.2EasyARSDK介绍15.2.1注册开发者账号注册EasyARSDK开发者账号首先需要访问EasyAR的官网/,注册开发者账号(制作项目需要),如图15.2所示。单击右上角“注册”按钮,在弹出界面输入注册信息,注册自己的开发者账号,注册后登录账号,如图15.3所示。15.2.2应用授权使用EasyARSDK,每个应用都需要授权,与SDKLicenseKey相关联,否则在联网的状态下是无法使用SDK功能的。所以,每新建一个应用都必须授权,步骤如下。下一页返回15.2EasyARSDK介绍
(1)登录自己的开发者账号。(2)进入开发者中心界面。(3)单击“SDK授权管理”,再单击“添加SDKlicensekey”按钮。(4)选择EasyARSDKBasic免费无水印版本,填好应用详情,都可以根据自己需要填写,这里需要注意的是BundleID(IOS)和PackageName(Android),这两个值需要与Unity中的PackageName一致。上一页下一页返回15.2EasyARSDK介绍
15.2.3SDK下载使用下载EasyARSDK,这里使用的是免费的Basic版,使用的是早期的1.3.1的版本,所以这里选择历史版本,如图15.9所示。找到EasyARSDKv1.3.1并下载EasyARSDKv1.3.1,如图15.10所示,下面还有EasyARSDKv1.3.1UnitySamples,需要的话可以自己下载,里面有很多官方案例,自学可以参考官方案例来学习。下载完成后解压EasyAR_v1.3.1.zip的压缩包,里面目录结构如下:安卓、苹果和Unity这3个平台的SDK,如图15.11所示。上一页下一页返回15.2EasyARSDK介绍
这里使用的是Unity引擎来开发,所以用到的是Unity目录下的文件,一个是案例Sample_HelloAR工程,可以直接用Unity打开,另一个是AR的SDK,与AR功能相关的接口都封装在里面,需导入Unity里使用。打开Unity,再打开Sample_HelloAR官方案例,Project窗口里HelloAR→Scenes→HelloAR场景。在没有输入SDKlicensekey时,AR功能是无法开启的。把之前官方授权的App里的SDKlicensekey值复制到EasyAR_Startup对象上的EasyARBehaviour脚本里。上一页下一页返回15.2EasyARSDK介绍
运行游戏,程序会自动调用电脑上的摄像头,用摄像头对准指定图片,会出现对应的模型。15.2.4SDK功能介绍其主要包含两部分,如图15.18所示。EasyAR_StartUp:相当于Unity里的主摄像机,AR的算法、摄像头的开启关闭、图像的识别、模型的跟踪等都封装好了,直接把这个预制体拖到场景里即可。ImageTarget:设置识别的底图和模型。它身上绑定了EasyImageTargetBehaviour.cs脚本,这个脚本里实现了AR功能的一些方法,可以在里面实现需要的逻辑。上一页下一页返回15.2EasyARSDK介绍
●OnTargetFound:摄像机识别到图像的回调方法,这里默认的方法是显示下面的所有子物体,即3D模型。●OnTargetLost:摄像机丢失图片的回调方法,这里默认的方法是隐藏下面的所有子物体,即3D模型。●OnTargetLoad:3D模型加载完后回调的方法。●OnTargetUnload:3D模型卸载后回调的方法。可以在以上几个方法里添加业务逻辑代码。ImageTarget对象身上的EasyImageTargetBehaviour组件参数介绍,如图15.21所示。上一页下一页返回15.2EasyARSDK介绍
Path:识别底图的路径,该路径包含名字,Storage选择Assets时默认的路径是StreamingAssets目录,所以把识别底图放到StreamingAssets目录下,Path直接填写图片名字加后缀就可以了。Name:识别底图的名字。ActiveTargetOnStart:是否在程序启动时就激活,只有处于激活状态才会被识别。Storage:资源的路径。把识别底图需要显示的3D模型放在ImageTarget-Image下面,作为它的子物体。上一页下一页返回15.2EasyARSDK介绍
这样设置后,运行游戏,AR功能可以正常使用,但是这样底图是没有材质的,不方便模型与底图位置关联和绑定。创建一个材质球,把材质球赋值给ImageTarget-Image,新建材质球。把材质球的贴图换成识别的底图。把材质球赋值给ImageTarget-Image对象身上的MeshRenderer组件。赋值完后效果如图15.27所示,底图也是显示的。上一页返回15.3AR小红军项目15.3.1项目准备工作新建一个Unity项目,按Ctrl+S组合键先保存场景,如图15.28所示。导入EasyARSDK。选择Assets→ImportPackage菜单命令,选择从EasyAR官网下载的SDK,放在前面下载的压缩包里面,如图15.29所示。导入后目录结构如图15.30所示。把Hiererchy窗口中的主摄像机MainCamera和DirectionalLight删除,因为使用的是EasyARSDK里面的摄像头作为场景的主摄像机。然后把Easy_AR_Startup和ImageTarget拖到Hierarchy窗口里(添加到场景中)。下一页返回15.3AR小红军项目
选中EasyAR_Startup对象,右边的Inspector属性口,把应用授权的值赋给它(只有授权后的应用才能使用SDK功能)。选中ImageTarget对象,从右边的属性窗口可以看到它身上绑的是ImageTargetBehaviour.cs脚本,该脚本是没有实现AR识别显示、隐藏的功能。可以自己写代码实现AR功能需要的几个接口,也可以从其官方的案例工程里直接把EasyImageTargetBehaviour.cs脚本拖到自己的项目里,该脚本里的接口都写好了,只需往里面添加逻辑代码即可。上一页下一页返回15.3AR小红军项目
这里把Sample_HelloAR项目里的EasyImageTargetBehaviour.cs脚本复制到工程里,同时把它挂到ImageTarget身上的ImageTargetBehaviour.cs脚本移除,添加EasyImageTargetBehaviour.cs。在Project窗口新建一个文件夹,重命名为StreamingAssets。注意命名不能错。把身份证背面图idback.jpg放在StreamingAssets目录下,必须把识别的底图放到该目录里才能被识别。再新建一个文件夹,重命名为Texture,把idback.jpg复制一份,放到该文件夹下。新建一个材质球,把材质球贴图换成idback.jpg,如图15.37所示,把材质球赋值给ImageTarget,同时设置EasyImageTargetBehaviour组件身上的属性。上一页下一页返回15.3AR小红军项目
在ImageTarget下面添加一个Cube作为它的子物体,作为摄像机识别到图像时显示的模型,稍微调整一下Cube的大小和位置。运行游戏,测试EasyAR功能。摄像头扫描到idback.jpg图片时会出现Cube模型,说明EasyARSDK运行正常。15.3.2导入小红军模型选择Assets→ImportPackage菜单命令,选择资源目录下的Army.unitypackage包,里面包含小红军模型和一整套动作,如图15.40和图15.41所示。上一页下一页返回15.3AR小红军项目
把ImageTarget对象下的子物体Cube删除,新建一个空对象CreateEmpty,重命名Child,把Child的Transform组件重置,把小红军模型01_Idle拖到Child上面,让它作为Child的子物体,适当调整01_Idle的大小和位置,让模型站在识别底图的中心,使模型大小适中,如图15.42所示,现在运行游戏,摄像头扫到识别底图出现的模型就是小红军了。15.3.3代码实现交互上一页下一页返回15.3AR小红军项目
AR功能正常,小红军可以正常地显示和隐藏,接下来添加一些简单交互,主要是在Android手机上运行的,所以这边的交互都是基于Android的触屏操作,这里先介绍单根手指滑动实现旋转模型、两根手指拉近拉远实现缩放模型。使用的是Unity的输入管理类Input,在Child对象身上添加一个C#脚本Control.cs,代码如图15.43所示。15.3.4小红军动画控制实现旋转和缩放功能后,再来添加动画控制功能。动作美工已经做好了,在前面导入的资源包里都有,这里使用的是Unity的动画组件Animator和动画控制器AnimatorControl来控制动画状态机的切换。首先介绍怎么使用动画控制器。先往小红军对象身上添加Animator动画组件(动画的相关API需要该组件来调用),如图15.46所示。上一页下一页返回15.3AR小红军项目
Animator组件上有几个属性需要用到。Controller:动画控制器(状态机),后面创建状态机时再说明。Avatar:模型结构(相当于骨骼),这里需要选择小红军的Avatar,只有选择了Avatar模型才能做动画表现。ApplyRootMotion:是否使用根动画,有些动画本身是带位移的,如果需要动画中位移,可以勾选此复选框。在Project窗口,单击鼠标右键,选择快捷菜单中的Create→AnimatorControl命令,创建一个动画控制器,来管理小红军的一整套动画状态,重命名Army。上一页下一页返回15.3AR小红军项目
双击Army动画控制器,进入动画控制器界面。动画的入口Entry默认会连接第一个拖进去的动画,即游戏一运行就会从Entry过渡到Idel,小红军执行站立Idel动作。把其他动作也拖到动画控制器窗口,并连接好动画之间的过渡。动画之间的过渡方法:需要选中一个动画,如Idel,单击鼠标右键,选择快捷菜单中的MakeTransition命令,然后把线连到badao动作。把Project窗口中的动画片段拖到动画控制器管理窗口中,如图15.50和图15.51所示。上一页下一页返回15.3AR小红军项目
动画的入口Entry默认会连接第一个拖进去的动画,即游戏一运行就会从Entry过渡到Idel,小红军执行站立Idel动作。把其他动作也拖到动画控制器窗口,并连接好动画之间的过渡。动画之间的过渡方法:需要选中一个动画,如Idel,单击鼠标右键,选择快捷菜单中的MakeTransition命令,然后把线连到badao动作。两个动画之间的过渡需要设置条件,没有条件限制会自动播放,所以需要给动画间的过渡添加条件。动画控制器窗口的左边有一个Parameters界面,可在这里添加条件,单击“+”号。过渡条件的类型有4种,这里创建一个Trigger类型的过渡条件,给条件参数重命名为play,如图15.56所示,让它作为从Idel站立动作切换到badao动作的过渡条件(后面的动作切换会用到这个条件上一页下一页返回15.3AR小红军项目
创建完条件参数后,来设置条件。用鼠标选中两个动画间的过渡线,这里是Idel和badao之间的过渡线,右边的Inspector属性窗口会有两个动画过渡的一些信息。单击“+”号,选择创建的条件参数。这样在代码里就可以通过animator.SetTrigger(“play”)来切换动画,play是上面设置的过渡条件。上一页下一页返回15.3AR小红军项目
按照上面的做法,把其他动画也拖到动画控制器窗口,需要手动切换动画的,过渡条件都设置为play,有些动画间是不需要设置条件限制的,如badao动作过渡到badaoidel,拔刀动作是自动过到拔刀站立动作的,不需要设置条件,如图15.59所示。设置好动画状态机后,把动画功能添加到代码中。先把动画控制器Army拖曳到小红军对象身上的Animator组件中,如图15.60所示。动画控制代码写在前面绑在Child上面的Control.cs脚本中。首先需要往小红军模型身上添加一个碰撞器,用来检测射线(判断手指是否触摸模型),调整碰撞器的大小和位置,让它包围整个模型,如图15.61所示。上一页下一页返回15.3AR小红军项目
在Awake方法里,查找小红军身上的Animator组件。在Update方法里,通过触摸屏幕发送射线,检测射线是否碰到模型,射线碰到模型再触发动画切换。15.3.5添加音效动作添加完后,再来添加音效。把音效资源music拖到Unity的Project窗口,如图15.64所示。在Child的子物体01_Idel身上添加一个AudioSource音频组件,把“PlayOnAwake”勾选去掉,播放音效在代码里控制。上一页下一页返回15.3AR小红军项目
这里使用在动画的某一帧中插入播放声音的事件,所以在01_Idel身上创建一个脚本AudioControl.cs控制音效的播放(注意:要在动画的某一帧中插入事件,方法脚本和Animator必须绑定在同一个对象身上,否则识别不到方法)。定义一个数组,用来存放音效的资源文件,在Awake方法里获取到声音组件AudioSource。给audioClip赋值,在Unity界面共有8个音效资源,所以把audioClip的大小设置为8,把音效资源拖曳到AudioClip。回到AudioControl脚本,写一个公有的方法PlayAudio让外部可以调用,参数index表示要播放哪个音效,使用audioSource.clip切换音效资源、audioSource.Play播放音效。上一页下一页返回15.3AR小红军项目
接着需要在动画的某一帧插入PlayAudio方法来播放音效,回到动画控制器窗口,双击其中的某个动画。例如,在拔刀动作时播放02这个拔刀的音效,所以双击拔刀动画,右边的Inspector属性窗口有该动画的相关属性,其中有一个Events。单击添加事件,可以在某一帧中添加一个事件,调用自己写的方法,这里调用的是前面写的PlayAudio,上一页下一页返回15.3AR小红军项目
下面的几个是参数,方法里定义的index是int类型的,所以填0,播放audioSource数组里的第0个音效,即拔刀的音效。如图15.70所示,也可以拖动蓝色的小矩形来调整事件的插入位置。其他动作添加音效的方法与此类似,这里就不一一演示了。添加完音效后,保存场景,发布成Android的APK包,安装到手机上就可以测试了。测试效果如图15.71和图15.72所示。上一页返回15.4AR小红军脱卡操作基本功能已经实现了,下面做些调整,加一个脱卡功能。当摄像头离开识别图后,模型不会消失,会移动到屏幕的中心。实现的原理如下。新建一个摄像机,当识别图丢失时,让该相机来渲染模型,EasyARSDK的相机功能关闭,当重新识别到图片时,再恢复用EasyARSDK的相机来渲染。(1)在场景里新建一个相机,重命名为LostCamera,如图15.73所示,选中该相机,在右边的Inspector属性窗口新增一个Layer层,命名为Lost,LostCamera只渲染该层,当扫描的识别图丢失后,会把小红军的层改为Lost,只让该相机渲染。下一页返回15.4AR小红军脱卡操作
修改相机的属性。ClearFlags:Depthonly;CullingMask:Lost(只渲染Lost层)。(2)新建一个空对象,重命名为LostTrack,把所属层级改为Lost,当识别图丢失后,该空对象用来存放小红军模型。把ImageTarget的子物体Child拖到LostTrack对象下面,改一下Child的层级,默认是default,改成Lost。调整LostCamera和LostTrack的位置,让LostCamera可以渲染到整个小红军模型。上一页下一页返回15.4AR小红军脱卡操作
在Awake方法里找到要用到的对象,把Child和ImageTarget通过拖曳的方式赋值给Child和ImageTarget。下面实现3个方法,代码如图15.85所示。①识别图丢失操作。因为射线是主摄像机发出的,所以当识别图丢失时,把EasyAR的相机tag设为“Untagged”,把lostCamera的tag设为“MainCamera”,这样当识别图丢失时lostCamera可以发射射线,实现交互;把Child对象的父节点设置为LostTrack,改变Child的所属层级,改为Lost层(8),同时把Child对象的位置、缩放、旋转重置。上一页下一页返回15.4AR小红军脱卡操作
②重新识别到操作。与上面的识别图丢失操作相反,把EasyAR的相机tag设置为“MainCamera”,把lostCamera的tag设置为“Untagged”,把Child对象的父节点设置为ImageTarget,改变Child的所属层级为default层(0),同时把Child对象的位置、缩放、旋转重置。③更改对象所属层。这里使用的是递归的方法,改变对象及其所有子物体的层级关系。前面曾经讲过,EasyImageTargetBehaviour.cs脚本里EasyARSDK封装好了几个回调的方法,即OnTargetFound(识别图识别回调)、OnTargetLost(识别图丢失回调)。所以只要在这两个方法里调用上面实现的识别图丢失和识别的方法即可,如图15.86所示。上一页下一页返回15.4AR小红军脱卡操作
首先在Awake方法里找到LostTrack脚本组件,如图15.87所示。然后在OnTargetFound和OnTargetLost方法里调用LostTrack里的方法,同时当识别图丢失时,模型不能被隐藏,所以在OnTargetLost方法里把HideObjects(Transform)方法注释掉,如图15.88所示。最后在代码里添加一个退出功能,当用户按手机上的返回键时,可以退出该App,这里把退出的代码放到LostTrack.cs脚本的Update方法里,如图15.89所示。上一页下一页返回15.4AR小红军脱卡操作
至此项目算是完成了,保存场景,出AndriodAPK包测试一下识别图丢失的脱卡功能。出Andriod包时有两个地方需要注意。勾选掉“AutoGraphicsAPI”,GraphicsAPIs选择OpenGLES2,这是EasyARSDK支持的图形处理AP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来五年木本盆花企业数字化转型与智慧升级战略分析研究报告
- 未来五年龙眼干、肉企业县域市场拓展与下沉战略分析研究报告
- 未来五年填料氢氧化铝企业县域市场拓展与下沉战略分析研究报告
- 未来五年交通护板、反光板、反光护栏企业县域市场拓展与下沉战略分析研究报告
- 2026年县乡教师选调考试《教师职业道德》题库带答案(b卷)
- 道路路面养护技术措施
- 2025年双江县委宣传部下属事业单位招聘职业能力测试备考题库300道必考题
- 未来五年学历职业教育企业县域市场拓展与下沉战略分析研究报告
- 2026陕西五龙洞国家森林公园招聘(6人)备考题库附答案
- 2025年临城县人工影响天气中心招聘职业能力测试备考题库300道必考题
- YY/T 1976-2025中医器械玻璃拔罐器
- FS1120设备安装步骤与调试手册
- 2025年消防文员笔试题库及答案(可下载)
- 华为GTM与IPMS流程介绍及实操案例
- 《非医疗生殖健康保健机构服务管理 规范》
- 供应链年终总结报告
- 2025年高考数学真题分类汇编专题10 直线与圆及圆锥曲线(全国)(解析版)
- 建筑工程拆除工程拆除物的清理方案及措施
- 全媒体矩阵宣传推广服务项目方案投标文件(技术方案)
- 2025年中国私募基金白皮书
- 矿山安全生产责任目标分解方案
评论
0/150
提交评论