1、第第1313章章 实践案例实践案例知识目标知识目标能力目标能力目标任务引入任务引入Tuesday,August 09,20221知识目标知识目标使用使用Unity3DUnity3D来创建一个完整的应用来创建一个完整的应用Tuesday,August 09,20222能力目标能力目标使用使用 Unity 3D Unity 3D 来创建一个完整的应用来创建一个完整的应用Tuesday,August 09,20223任务引入任务引入使用 Unity 3D 来创建一个完整的AR应用。Tuesday,August 09,2022413.1 准备工作准备工作 1.注册扫描的图片和License Key;2
2、.单击“Download Database”下载注册好的识别图;3.单击 Create Project 创建工程。图 13-1 图片识别度Tuesday,August 09,20225导入识别图、模型和 Vuforia SDK图 13-2 导入图片Tuesday,August 09,2022613.2 导入素材导入素材 单击 AR Camera,在Inspector 面板中的 Vuforia Behavior 脚本中找到 App License Key。图 13-3 App License KeyTuesday,August 09,20227将License Key粘贴到 App Licens
3、e Key 的空白处图 13-4 License KTuesday,August 09,20228将 Database 和 Image Target 属性分别设置成创建的 Database 和识别图片;使模型成为 Image Target 的子物体,并适当调整模型的大小、位置和角度。图 13-5 设置完成图 13-6 设置为子物体Tuesday,August 09,20229测试效果Tuesday,August 09,20221013.3 添加动画添加动画 图 13-8 预览窗口Tuesday,August 09,202211状态连接Tuesday,August 09,202212添加Anim
4、ator 组件图 13-10 Animator 组件设置Tuesday,August 09,202213编写用来控制动画播放的脚本图 13-11 Det 的设置提示:代码较长,在提示:代码较长,在PPTPPT结尾处给出。结尾处给出。Tuesday,August 09,20221413.4 添加声音添加声音 图 13-12 添加代码Tuesday,August 09,20221513.5 添加特效和背景添加特效和背景 添加一个出场特效 图 13-13 预制体图 13-14 设置Tuesday,August 09,202216新建一个Particle 的脚本,在脚本的 Update 函数中加入代码
5、。其中 ps 是 ParticleSystem 类型的变量,ff 为 Found_fish 类型的变量,然后将该脚本赋给预制体,测试效果如图 13-16 所示。图 13-16 效果图 13-15 代码Tuesday,August 09,202217添加背景图片图 13-18 背景图 13-17 材质球设置Tuesday,August 09,20221813.6 添加交互功能添加交互功能 创建一个名为 Move 的脚本来实现游动图 13-19 Plane Tuesday,August 09,20221913.7 添加脱卡功能添加脱卡功能 图 13-20 剩余组件图 13-21设置子物体Tuesd
6、ay,August 09,202220变量设置Tuesday,August 09,20222113.8 打包下载打包下载 详细打包过程请参阅第 12 章相关内容。Tuesday,August 09,202222Found_fish 脚本代码:using UnityEngine;using Vuforia;public class Found_fish:MonoBehaviour,ITrackableEventHandlerprivate TrackableBehaviour mTrackableBehaviour;public bool TargetFound=false;void Start
7、()mTrackableBehaviour=GetComponent();if(mTrackableBehaviour)mTrackableBehaviour.RegisterTrackableEventHandler(this);Tuesday,August 09,202223public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus,TrackableBehaviour.Status newStatus)if(newStatus=TrackableBehaviour.Status.DETECTED
8、|newStatus=TrackableBehaviour.Status.TRACKED|newStatus=TrackableBehaviour.Status.EXTENDED_TRACKED)OnTrackingFound();TargetFound=true;elseOnTrackingLost();TargetFound=false;Tuesday,August 09,202224private void OnTrackingFound()Renderer rendererComponents=GetComponentsInChildren(true);Collider collide
9、rComponents=GetComponentsInChildren(true);foreach(Renderer component in rendererComponents)component.enabled=true;foreach(Collider component in colliderComponents)component.enabled=true;Debug.Log(Trackable +mTrackableBehaviour.TrackableName+found);Tuesday,August 09,202225private void OnTrackingLost(
10、)Renderer rendererComponents=GetComponentsInChildren(true);Collider colliderComponents=GetComponentsInChildren(true);foreach(Renderer component in rendererComponents)component.enabled=false;foreach(Collider component in colliderComponents)component.enabled=false;Debug.Log(Trackable +mTrackableBehaviour.TrackableName+lost);Tuesday,August 09,202226ModelController 脚本代码:Animator ani;public Found_fish dte=new Found_fish();void Start()ani=GetComponent();void Update()if(dte.TargetFound)ani.SetBool(swim,true);Tuesday,August 09,202227谢 谢Tuesday,August 09,202228