Unity3d--AR/MR 技术
一.作业要求
1、 图片识别与建模
2、 虚拟按键小游戏
3、开发城市定向越野运动 MR 游戏【可选】
游戏要求:
- 准备:
- 选择为每个用户准备一套拼图图片(含干扰图片),按一定策略发布到目标位置(随机位置偏移)
- 越野地图一张
- 开始游戏:
- 玩家在起点,用手机在起点附近,捕捉图片并显示第二个目标
- 然后每到一个目标位置,捕捉与前面捕捉的图片可拼接的图片,拼接成功,则显示下一个目标
- 游戏结束:
- 玩家到达终点的时间最短者胜
二.具体实现
首先是AR的介绍:增强现实(Argumented Reality (AR))是一种将真实世界信息和虚拟世界信息“无缝”集成的新技术,是把原本在现实世界的一定时间空间范围内很难体验到的实体信息(视觉信息,声音,味道,触觉等),通过电脑等科学技术,模拟仿真后再叠加,将虚拟的信息应用到真实世界,被人类感官所感知,从而达到超越现实的感官体验。
接着根据教程下载安装AR SDK:进入Unity3d,选择File->Build Settings->PlaySettings->XRSettings,点击支持虚拟现实即可开始下载Vuforia。
接着是申请**,进入vuforia官网,点击右上角注册,接着点击Develop->LicenseManager->Get Development Key
根据提示创建以后一个项目就创建好了。
然后添加数据库用于保存识别图的数据。点击Develop->Target Magager->Add Database
这里选择Single Images做为识别图并填写Width,我填写的是0.3m,我选择的图片如下,这样便创建好数据库了。
上传之后会生成识别图的特征点数据包,Vuforia还会为你的识别图打分,星级越高说明识别效果越好。图像的星级 我们会注意到将识别图上传到数据库时,target项右侧会有星级显示,星级越高代表识别图的质量越高。经试验,影响识别图最主要的因素就是待识别图的对比度,这里应该要极力避免使用有很多连续相同或相似大色块的图片,因为分析识别图特征点的原理是 根据色块边缘 来决定的,色彩变化越丰富,色块边缘、棱角就越多,进而特征点就越多,而特征点越多就意味着识别图质量越高。另外,以下三点是识别图质量最主要影响的三个方面:
- 星级越高越容易识别
- 星级越高识别速度越快
- 星级越高更不容易出现抖动
可以看到我选择的是别吐为4星。
接着下载数据库,点击Download Database->Unity Editor,得到一个Unity包。
接着在Unity中创建ARCamera
然后点击Vuforia Configuration,复制之前的License Key粘贴到App License Key中。
接着创建游戏对象ImageTarget,然后双击之前下载好的数据库的Unity包,便可导入这个Unity包,然后再Image Target Behaviour中选择自己导入的数据库。在Advanced中点击Add Virtual Buttion即可创建虚拟按钮了,需要注意的是虚拟按钮需要在识别图之内。
接着调整ARcamera和ImageTarget的位置,保证camera能够照到ImageTarget
最后是代码实现,脚本挂在ImageTarget上,先找到子对象中所有按钮,然后一点击按钮就切换物体位置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class control : MonoBehaviour, IVirtualButtonEventHandler {
private GameObject aaa;
void Start() {
VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour>();
for (int i = 0; i < vbs.Length; ++i) vbs[i].RegisterEventHandler(this);
a = transform.Find("aaa").gameObject;
}
public void OnButtonPressed(VirtualButtonBehaviour vb){
if(vb.VirtualButtonName=="vb1")aaa.transform.position = new Vector3(0.5f, 0.5f, 0f);
else aaa.transform.position = new Vector3(-0.5f, 0.5f, 0f);
}
}
这样就完成了图片识别与建模和虚拟按键小游戏两个任务,最后实现图如下
三.实验总结及思考
在这次作业中我第一次接触到了AR技术并实现了简单的AR小游戏,学习了Vuforia在Unity中的使用方法,也让我体会到了AR的奇妙之处。这次作业也是3d课程的最后一次作业,在一学期的3d课程的学习之中我也学习到了很多,从最基础的Unity小游戏开始一步步变难,我也对Unity的适用于变成越来越熟悉,这些都使我受益匪浅。最后也感谢老师和TA的悉心教导以及师兄师姐博客的鼎力支持。
Github地址:
演示视频: