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 dra;

    void Start() {

        VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour>(); 

        for (int i = 0; i < vbs.Length; ++i) vbs[i].RegisterEventHandler(this);

        dra = transform.Find("dragon").gameObject;

    }



    public void OnButtonPressed(VirtualButtonBehaviour vb){

        switch (vb.VirtualButtonName){

            case "vb1":

                dra.transform.position = new Vector3(0.2f, 0f, 0f);

                break;

            case "vb2":

                dra.transform.position = new Vector3(-0.2f, 0f, 0f);

                break;

        }

    }

    public void OnButtonReleased(VirtualButtonBehaviour vb){

        switch (vb.VirtualButtonName){

            case "b1":

                break;

            case "b2":

                break;

        }

    }

}

这样就完成了图片识别与建模和虚拟按键小游戏两个任务,最后实现图如下
在这里插入图片描述

三.实验总结及思考

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值