Unity+Vuforia 动态切换模型
设计需求:
角色模型由用户自行选择,进入到AR场景后,扫描识别指定图片(或者 平面,这个功能不同的移动设备支持程度不同)后展示用户选择的模型,然后进入下一个自由组合跳舞场景,跳舞时自动录制视频(就是上面视频的效果了)。
具体实现:
这个开发比较简单,参照Vuforia官方教程,拖拖拽拽几分钟就可以搞定一个简单的AR效果。
以ImageTarget为例,在这列出需要特殊修改的几个细节:
1、图片的识别度,图片的灰度图特征点决定其 Augmentable
图片尽量多的顶点信息,如果图片已定,那就可以通过锐化图片,增加对比度来提升其识别度。
同一张图片,只是通过对图片对比度的调整就直接从3星变为了5星。
2、Vuforia在ImageTarget对象上的有一个默认的追踪事件处理脚本(DefaultTrackableEventHandler),其原处理方式是 识别、追踪到目标后,将其子节点的Render组件设置为Active,将其显示出来。丢失目标后又将其隐藏。
在这里我将其替换为修改后的MomoTrackableEventHandler,脚本中做了一些特殊的处理,来便于实现我所需要的效果。
代码也非常简单,模型在只在第一次发现的时候设置为active,以后丢失后只是执行移除屏幕的位移操作。此处实现一个ImageTarget显示不同的模型,这个只需要将不同的GameObject挂在到ImageTarget下就可以了。
protected virtual void OnTrackingFound() { if (tips && tips.gameObject.activeSelf) { tips.gameObject.SetActive(false); } GameObject role = RolesManager.Instance.CurRole; if (role) { if(!role.activeSelf) { role.SetActive(true); } role.transform.localPosition = new Vector3(0f, 0f, 0f); role.transform.localRotation = Quaternion.Euler(-60, 180, 0); } } protected virtual void OnTrackingLost() { GameObject role = RolesManager.Instance.CurRole; if (role) { role.transform.localPosition = new Vector3(1000f, 1000f, 1000f); role.transform.localRotation = Quaternion.identity; } }
3、世界中心模型的设定:
为了提升AR中的稳定性,将WorldCenterMode设置为FIRST_TARGET,或者可以选为特定的TARGET(直接设为我们指定的ImageTarget)。
另外Vuforia还提供了一些针对ImageTarget提示稳定性的设置,这个可以根据情况来自行设定。
好了,搞完这些细节基本就可以在设备上看到一个小的AR效果了,其他的坑就不在这多说了,感兴趣的自己填吧,也可以的关注微信号一块沟通。