Unity+Vuforia 动态切换模型

发表于2019-01-06
评论2 7.8k浏览
先来看一下最终的视频效果:

设计需求:

角色模型由用户自行选择,进入到AR场景后,扫描识别指定图片(或者 平面,这个功能不同的移动设备支持程度不同)后展示用户选择的模型,然后进入下一个自由组合跳舞场景,跳舞时自动录制视频(就是上面视频的效果了)。



具体实现:

这个开发比较简单,参照Vuforia官方教程,拖拖拽拽几分钟就可以搞定一个简单的AR效果。

ImageTarget为例,在这列出需要特殊修改的几个细节:


​1、图片的识别度,图片的灰度图特征点决定其 Augmentable

图片尽量多的顶点信息,如果图片已定,那就可以通过锐化图片,增加对比度来提升其识别度。

同一张图片,只是通过对图片对比度的调整就直接从3星变为了5星

2、VuforiaImageTarget对象上的有一个默认的追踪事件处理脚本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效果了,其他的坑就不在这多说了,感兴趣的自己填吧,也可以的关注微信号一块沟通。


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: