AR/MR技术


作业要求

  • 图片识别与建模
  • 虚拟按键小游戏

Vuforia配置过程

虽然在课程网页上已经讲解过Vuforia的配置使用过程,但是我在实际使用过程中发现课程网页上的教程太过老旧,很多配置方法和现在的配置方法都不一样了,而且也有很多配置细节完全没有提到,因此我在这里详细说明一下我的Vuforia配置过程。我的unity版本是Unity 2018.3.14f1个人版,如果你的版本和我的版本差距太大的话,以下教程我就不保证管用了,但是你也可以将这个教程作为参考。

创建证书

首先在官网注册一个开发者账号,经过一系列注册验证操作之后,我们可以进入到如下证书管理界面:

这里我们添加一个证书密钥,名字就随便取一个。这里我们创建的密钥会用于之后unity内部的配置。

创建成功之后证书列表中就会出现一个新的证书项,点击进入之后就可以进入下面的页面,其中会有一长串密钥,点击这个密钥就会自动复制到剪切板。

创建目标数据库

在Develop界面选择Target Manager,创建一个数据库,可以对所有Target及其特征树进行管理和保存。


添加一个识别目标,这里选择Single Image类型,然后随便选择一张图片上传。注意选择图片时最好选择那些棱角分明的图片,这样更容易提取特征方便之后的识别工作。

添加成功之后我们就可以看到targets列表中出现了我们刚刚添加的图片。点击Download Database就会生成一个unity package。

在我们新建的unity项目中就可以导入刚刚生成的数据包,这些导入的数据会在之后用到。

安装vuforia扩展包

这一步的操作和课程网页上的差别比较大,我认为很有分享价值。
目前在官网上能够直接下载的vuforia engine的版本是8.6,已经没有下载unity扩展包的选项了。我在官网上下载了VuforiaSupportInstaller-Windows-8-6-7.zip并安装,但是由于版本不一致,所以我也无法进行后续操作。经过一番尝试,我发现了以下的安装方法供大家参考。

打开building settings,是的,就是那个导出游戏时使用的选项。进入如下界面:

选择其中的player settings,进入如下界面可以看到XR support Installers下面有一个链接。使用这个链接可以自动跳转到网页,并开始下载与你的unity版本一致的vuforia。

运行安装程序,将安装目录设置为你的unity所在的安装路径。不要使用默认安装路径,如果安装程序无法在指定路径下找到unity.exe,安装是无法正常进行的。注意,在安装之前必须要关闭当前所有unity项目,不然安装过程也是无法进行的。

这时我们再次在building setting里面打开player setting,可以看到XR setting下出现了一个新的选项。在如下界面中勾选Vuforia Augmented Reality,完成这一步之后才能进行进一步的配置。 如果你安装了与你的unity版本不对应的Vuforia,那么就不会出现那个选项。

安装完成之后,重新打开项目,我们可以看到GameObject选项下出现了Vuforia Engine的选项,这时我们导入一个AR Camera。导入过程中unity会提示你,导入AR Camera的同时还需要导入一些相关的包,这个时候选择让unity自动导入就行了,unity这时候导入的内容其实就是之前我们想得到的vuforia扩展包。

导入完成之后我们选择已导入的AR Camera,选择其中的VuforiaConfiguration选项,进入如下界面:

在这个界面中的App License Key位置粘贴上我们前面得到的证书密钥,完成这一步之后我们才能开始使用Vuforia。

到此为止我们就已经成功完成了Vuforia在unity上的配置工作,接下来我们就可以开始使用vuforia来开发我们的AR游戏了。

牧师与恶魔AR版

这里我将之前做的牧师与恶魔过河的小游戏改成AR版本。选择Gameobject->Vuforia Engine->Camera Image->Camera Image Target添加一个ImageTarget,然后在如下设置界面中将Type设置为Predefined,这时系统会自动选择之前已经导入的3D_Course数据库中的dragon图片。调整AR相机和ImageTarget之间的相对位置和大小之后我们就可以简单测试物体识别的效果了。

运行之后我就发现程序报错,而且屏幕上也没有任何显示。经过几番搜索,我发现了是摄像机设置出现了一点小问题。我电脑上使用的是Intel realsense D435i深度相机,所以我的显示输出里包含RGB图像和深度图像两种。

在Webcam设置中我们可以选择摄像机设备种类,这里要选择正确的相机作为图像输入。之前系统自动选为深度图输入了,所以运行自然出现了问题。但是这个问题不只是对于我这种使用奇怪相机的用户,对于有的笔记本用户即使电脑上只有一个前置摄像头,系统也会检测出前置和后置两个摄像头,这个时候也会遇到和我一样的问题。总之,使用之前一定要选择正确的摄像机设备。

测试效果:

为了实现用户与游戏的交互,我们这里使用Virtual button组件。virtual button可以在Image Target内创建,创建方法如下:

我们在ImageTarget下创建两个Virtual Button,并且在Virtual Button下加入两个平面使得按键可见。

在ImageTarget挂载脚本VirtualButtonEventHandler.cs用于控制两个虚拟按键对应的按下(OnButtonPressed)和松开(OnButtonReleased)对应的行为。在这里我就让两个按键分别对应游戏的运行和重启两个功能,详细实现如下:

VirtualButtonEventHandler.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Vuforia;public class VirtualButtonEventHandler : MonoBehaviour, IVirtualButtonEventHandler
{public VirtualButtonBehaviour[] vbs;private IUserAction action;public GameObject auto_button;public GameObject restart_button;// Start is called before the first frame updatevoid Start(){vbs = GetComponentsInChildren<VirtualButtonBehaviour>();for (int i = 0; i < vbs.Length; i++){vbs[i].RegisterEventHandler(this);}action = SSDirector.getInstance().currentSceneController as IUserAction;}// Update is called once per framevoid Update(){}public void OnButtonPressed(VirtualButtonBehaviour vb){switch (vb.VirtualButtonName){case "restart":Debug.Log("vbutton restart pressed");restart_button.GetComponent<MeshRenderer>().material.color = Color.red;action.restart();break;case "auto":Debug.Log("vbutton auto pressed");auto_button.GetComponent<MeshRenderer>().material.color = Color.red;action.auto_move();break;default:break;}}public void OnButtonReleased(VirtualButtonBehaviour vb){switch (vb.VirtualButtonName){case "restart":Debug.Log("vbutton restart released");restart_button.GetComponent<MeshRenderer>().material.color = Color.white;action.restart();break;case "auto":Debug.Log("vbutton auto released");auto_button.GetComponent<MeshRenderer>().material.color = Color.white;action.auto_move();break;default:break;}}
}

其他的代码方面的修改都比较小,就没有全部展示在博客中。如果感兴趣的话可以去我的 github 中查看。

这样直接将之前的游戏改为AR版本之后就出现了游戏中坐标的问题。我之前在游戏里使用的是世界坐标来控制游戏对象的运动,但是在AR环境下运行时Image Target的位置和方向都是时刻变化的,这就导致了运行时游戏对象的位置混乱的情况。
这时我们就需要到vuforia behaviour中修改world center mode属性。在默认情况下,世界坐标是以AR camera为中心的。现在我们将其修改为FIRST_TARGET,这个值的含义是以第一个检测到的Image Target为世界坐标中心。这样设置的结果就是Image Target保持静止,而AR camera运动,这样就完美解决了坐标系的问题。

运行效果

将之前导入的图片打印出来作为测试场景。用户可以使用两个虚拟按钮选择自动运行模式和重启游戏。我发现在屏幕上用鼠标也能同时对游戏角色进行操作。所以用户可以选择用鼠标也可以用虚拟按键来控制游戏。


可以看到整个游戏的运行效果还行。但是Vbutton的准确度不是非常高,所以我也没有做太过复杂的交互功能。详细工程内容以及运行视频请参见我的github,谢谢!

unity3D学习10 AR/MR技术相关推荐

  1. 【Unity3d学习】AR技术的简单了解

    文章目录 写在前面 AR简介 Vuforia使用 Unity内嵌的Vuforia模块 使用Vuforia的AR组件 使用AR Camera组件 添加虚拟按钮 AR小游戏制作 写在前面 本次项目Gith ...

  2. 探测器视场目标位置怎么算_肖特发布新一代RealView高折射率玻璃晶圆,AR/MR眼镜可实现对角线65视场角...

    5月14日消息,作为国际化高科技集团,德国肖特推出了新一代肖特RealView™玻璃晶圆,为增强现实/混合现实(AR/MR)穿戴式硬件制造商们提供新的解决方案,其高达1.9的高折射率可大幅提升用户体验 ...

  3. 遇见未来-北京AR/MR线下技术交流邀请您(已过期)

      最近联合了华为准备做一次AR/MR行业技术讨论交流活动,侧重于AR/MR技术发展前沿.项目实施落地.5G风口下的产业发展前景.当前面临的困局及应对方案等话题.热忱欢迎北京这边的朋友过来交流讨论! ...

  4. 十亿红包还不够,揭秘快手春节四大技术玩法:AI/AR/MR都被装进App,为了这个春晚真拼了...

    郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 要不大家现在都喜欢科技互联网公司呢. 如今每年春节,这些公司都是绞尽脑汁.争前恐后想给全国人民拜年.互动,发红包. 这不,BAT之后,今年 ...

  5. 谈谈XR关键技术及VR/AR/MR/XR关系

    一.先别被VR/AR/MR/XR搞晕,说说区别 虚拟现实(Virtual Reality,VR).增强现实(Augmented Reality,AR)等业务以其三维化.自然交互.空间计算等完全不同于当 ...

  6. 音视频云系列 - 谈谈XR关键技术及VR/AR/MR/XR关系

    作者,李琳,毕蕾,灯塔 一.先别被VR/AR/MR/XR搞晕,说说区别 虚拟现实(Virtual Reality,VR).增强现实(Augmented Reality,AR)等业务以其三维化.自然交互 ...

  7. 光大控股新经济领投智能眼镜研发公司nreal,推动AR、MR“技术-产品-应用”生态体系建设...

    2月26日消息,近日,光大控股新经济完成对"MR智能眼镜"研发公司nreal的A+轮投资.此轮融资由光大控股新经济领投,爱奇艺.华创资本.顺为资本跟投.据悉,本轮融资资金将用于技术 ...

  8. 2007年你必须学习的10项.NET技术

    1.WCF (Windows Communication Foundation):虽然WCF显然没有WPF或SilverLight那么吸引人,但是它却是在.NET框架下解决业务问题的基础.所以你今年至 ...

  9. 总结必须学习的10项.NET技术

    1.WCF (Windows Communication Foundation):虽然WCF显然没有WPF或SilverLight那么吸引人,但是它却是在.NET框架下解决业务问题的基础.所以你今年至 ...

最新文章

  1. 命令查看多线程所有线程ID
  2. 和我一起作Tess的windbg lab - Lab3, Memory
  3. setting virtualbox share folder in windows7 system
  4. PowerDesigner的Table视图同时显示Code和Name的方法[转发]
  5. 用计算机写作文的好处,《用计算机写作文》教案
  6. android 能自动选择的listview,Android ListView多选模式
  7. 学会这21条,你离 Vim 大神就不远了!
  8. Lua coroutine vs Java wait/notify
  9. centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)
  10. Flume整合SparkStreaming出现UnsupportedClassVersionError: org/apache/spark/streaming/flume/sink/SparkFlum
  11. Django进阶之中间件
  12. java多线程图片压缩包_年轻人不讲武德,竟然还搞不懂JVM?求你们来看阿里Java开发岗的招聘要求吧!...
  13. 解决dev控件版本过期问题
  14. 谈话节目APE系列:如何成为技术达人
  15. centos离线安装docker-ce 18.03.0-ce
  16. 怎样设置txt的默认打开方式(比如用nodePad++)
  17. JS原生编写飞机大战小蜜蜂游戏
  18. python 读取zip包中的数据
  19. Box2D 实现不倒翁效果 绘制扇形
  20. 怎么把path里oracle地址删掉,path路径删除了怎么办

热门文章

  1. 关于Linux mint更换中文字体后全局楷体修改办法
  2. 三大集合:List、Map、Set
  3. ubuntu 配置nginx
  4. BKEX Global研究院最新市场信息解读
  5. 嘘!市面上短视频(douyin)“去水印”的工具原来是这样实现的
  6. 芒格最新演讲:中国的水有些聪明人已经蹚进去了,时候到了更多人会进场
  7. ARM指令浅析1(mov、ldr)
  8. python读取excel日期小数_RPA-使用Python读取Excel日期结果为数字时的转换处理方法...
  9. 计算机和电脑键盘进水怎么办,笔记本键盘进水失灵了怎么办?别着急,只需记住这几招!...
  10. XUPT_ACM2021寒假训练第二周练习记录