欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity3d--AR/MR 技术

程序员文章站 2022-07-13 08:47:49
...

一.作业要求

1、 图片识别与建模
2、 虚拟按键小游戏
3、开发城市定向越野运动 MR 游戏【可选】
游戏要求:

  • 准备:
    • 选择为每个用户准备一套拼图图片(含干扰图片),按一定策略发布到目标位置(随机位置偏移)
    • 越野地图一张
  • 开始游戏:
    • 玩家在起点,用手机在起点附近,捕捉图片并显示第二个目标
    • 然后每到一个目标位置,捕捉与前面捕捉的图片可拼接的图片,拼接成功,则显示下一个目标
  • 游戏结束:
    • 玩家到达终点的时间最短者胜

二.具体实现

首先是AR的介绍:增强现实(Argumented Reality (AR))是一种将真实世界信息和虚拟世界信息“无缝”集成的新技术,是把原本在现实世界的一定时间空间范围内很难体验到的实体信息(视觉信息,声音,味道,触觉等),通过电脑等科学技术,模拟仿真后再叠加,将虚拟的信息应用到真实世界,被人类感官所感知,从而达到超越现实的感官体验。
接着根据教程下载安装AR SDK:进入Unity3d,选择File->Build Settings->PlaySettings->XRSettings,点击支持虚拟现实即可开始下载Vuforia。
Unity3d--AR/MR 技术
接着是申请**,进入vuforia官网,点击右上角注册,接着点击Develop->LicenseManager->Get Development Key
Unity3d--AR/MR 技术
Unity3d--AR/MR 技术
根据提示创建以后一个项目就创建好了。
Unity3d--AR/MR 技术
然后添加数据库用于保存识别图的数据。点击Develop->Target Magager->Add Database
Unity3d--AR/MR 技术
Unity3d--AR/MR 技术
这里选择Single Images做为识别图并填写Width,我填写的是0.3m,我选择的图片如下,这样便创建好数据库了。
Unity3d--AR/MR 技术
Unity3d--AR/MR 技术
上传之后会生成识别图的特征点数据包,Vuforia还会为你的识别图打分,星级越高说明识别效果越好。图像的星级 我们会注意到将识别图上传到数据库时,target项右侧会有星级显示,星级越高代表识别图的质量越高。经试验,影响识别图最主要的因素就是待识别图的对比度,这里应该要极力避免使用有很多连续相同或相似大色块的图片,因为分析识别图特征点的原理是 根据色块边缘 来决定的,色彩变化越丰富,色块边缘、棱角就越多,进而特征点就越多,而特征点越多就意味着识别图质量越高。另外,以下三点是识别图质量最主要影响的三个方面:

  • 星级越高越容易识别
  • 星级越高识别速度越快
  • 星级越高更不容易出现抖动
    可以看到我选择的是别吐为4星。
    Unity3d--AR/MR 技术
    接着下载数据库,点击Download Database->Unity Editor,得到一个Unity包。
    Unity3d--AR/MR 技术
    接着在Unity中创建ARCamera
    Unity3d--AR/MR 技术
    然后点击Vuforia Configuration,复制之前的License Key粘贴到App License Key中。
    Unity3d--AR/MR 技术
    接着创建游戏对象ImageTarget,然后双击之前下载好的数据库的Unity包,便可导入这个Unity包,然后再Image Target Behaviour中选择自己导入的数据库。在Advanced中点击Add Virtual Buttion即可创建虚拟按钮了,需要注意的是虚拟按钮需要在识别图之内。
    Unity3d--AR/MR 技术
    接着调整ARcamera和ImageTarget的位置,保证camera能够照到ImageTarget
    Unity3d--AR/MR 技术
    Unity3d--AR/MR 技术
    最后是代码实现,脚本挂在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);
    }
}

这样就完成了图片识别与建模和虚拟按键小游戏两个任务,最后实现图如下
Unity3d--AR/MR 技术

三.实验总结及思考

在这次作业中我第一次接触到了AR技术并实现了简单的AR小游戏,学习了Vuforia在Unity中的使用方法,也让我体会到了AR的奇妙之处。这次作业也是3d课程的最后一次作业,在一学期的3d课程的学习之中我也学习到了很多,从最基础的Unity小游戏开始一步步变难,我也对Unity的适用于变成越来越熟悉,这些都使我受益匪浅。最后也感谢老师和TA的悉心教导以及师兄师姐博客的鼎力支持。
Github地址:
演示视频:

相关标签: unity3d