前言
上学期担任了导师一门选修课的TA,课程是关于VR和AR的,所以就设计了一个简单的AR小Demo实验,其实都是网络上用Unity+Vuforia做的AR效果,这里只是整理归纳一下步骤而已,分为两部分,第一部分是显示模型,第二部分是对模型进行简单操作。由于这个实验操作说明是面向没有接触过Unity和Vuforia的同学,所以会特别详细(啰嗦)。第一部分的内容请看Unity5+Vuforia实现一个AR小Demo(1)。下面开始第二部分的讲述。
效果
能够对显示的模型进行交互。
步骤
17.在Hierarchy视图中选中ImageTarget,在Inspector视图中找到Default Trackable Event Handler脚本,在名字上右键,选择Edit Script打开了编辑界面。
首先解释一下这个脚本,这个脚本是程序用来检测摄像头视野范围内是否追踪到识别图。
Start函数是Unity的固定函数,只在程序开始时执行一次,所以在这里进行的一般是变量的初始化。
另外还有一个Update函数,也是固定函数,会在每一帧被调用,我们对模型的操作会在Update这个函数里进行。
OnTrackableStateChanged函数是在追踪状态发生改变时执行相应的操作,在追踪到识别图,就会进入if语句,调用OnTrackingFound函数把模型绘制出来。在追踪不到识别图时就会进入else语句,调用OnTrackingLost函数取消模型的显示。
18.开始我们的编程,放心,代码量不大,而且逻辑很容易。首先设置几个变量:
chopper是一个GameObject类型变量,用来表示程序中的一个对象
originScale和newScale都是Vector3类型,有三个分量x,y,z,用来表示三个方向的缩放因子
isTracked是一个bool变量,用来表示识别图是否被追踪到。
19.在Start函数中初始化变量:
GameObject.Find是用来找到我们的目标对象,参数是对象的名字,我们的目标对象就是模型,所以是模型的名字,这个名字可以在Hierarchy中看到
获取模型后,把模型的原始缩放因子存储起来,其中chopper.transform就是指下图这个组件
它包含着position(位置信息),rotation(旋转信息),scale(缩放信息),所以我们通过chopper.transform.localScale得到表示模型缩放因子的3维向量,值是[0.04,0.04, 0.04]。
最后初始追踪状态isTracked设为false表示没有追踪到。
20.更新追踪的状态,直接利用现有的OnTrackableStateChanged函数,在对应情况下设置isTracked的值。
21.最后编写Update函数,根据追踪的状态和鼠标事件更新模型。
在Start函数下面添加一个Update函数。
当追踪到了识别图,利用Input.GetMouseButtonDown函数监听鼠标的点击事件,参数0表示鼠标左键,如果点击了鼠标左键,那么Input.GetMouseButtonDown(0)就会返回true,这时如果新的缩放因子newScale不小于0.01(避免过度缩小),我们减小newScale,然后让模型的缩放因子等于newScale,这就实现了缩小模型。
当追踪不到识别图,要把模型的缩放因子重置为原始的缩放因子,不然下次显示时仍是缩小后的模型。
最终的效果如下:
得到上面的结果就完成了第二部分对模型进行简单操作。以上演示的是PC端的,因为Vuforia是移动端的一个SDK,所以发布成PC端的程序会无法运行。如果是做APP的话,那就得配置好JDK跟Android SDK,交互方式也会不一样,因为移动端没有键盘和鼠标,所以需要其他的交互方式,比如监听触摸事件或是额外添加按钮等UI元素,这些内容可以在网上搜到很多资料,就不详细描述。