Unity3d--AR/MR 技术

2023-11-11

一.作业要求

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制作虚拟按钮

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3d--AR/MR 技术 的相关文章

  • Unity3D之MonoBehaviour

    Unity3D中的MonoBehaviour是一种基于组件的编程架构 用于开发游戏和应用程序 它是Unity引擎中用于创建行为的基类之一 并且可以让你通过重写其方法来定义对象在游戏运行时的行为 首先 在Unity中创建一个游戏对象并向其添加
  • Unity3D 地形(Terrain)设置

    这篇说的是Unity地形 关于Unity3D是什么 我就不多做解释了 由于工作原因 该系列原创教程不定期更新 每月必然有更新 谢谢各位 Unity地形 新建地形 如图在菜单中新建一个地形 就会在 中看到Terrain对象 如果要修改地形参数
  • Unity UGUI的RawImage(原始图片)组件的介绍及使用

    Unity UGUI的RawImage 原始图片 组件的介绍及使用 1 什么是RawImage组件 RawImage是Unity UGUI中的一个组件 用于显示原始图片 与Image组件不同 RawImage可以直接显示原始图片的像素数据
  • 离散仿真引擎基础作业与练习

    作业内容 一 简答题 1 解释 GameObjects 和 Assets 的区别与联系 2 下载几个游戏案例 分别总结资源 对象组织的结构 3 使用 debug 验证 MonoBehaviour 基本行为或事件触发条件 4 了解 GameO
  • Vuforia Virtual Button(虚拟按钮)使用技巧

    最近一直在摸索Vuforia的使用 Virtual Button算是一个比较容易吸引人眼球的功能 在经过一些测试后 我来总结下自己在探索过程中得到的一些经验 1 如何新建一个Virtual Button工程 导入Vuforia sdk 后把
  • 我的和unity3d的小故事1——恶魔射手之鼠标控制移动之input.getaxis("Horizontal")与input.getaxis("Vertical")

    跟着恶魔射手视频学习的过程中遇到的第一个问题是怎么也移动不了 那么问题来了 打印出来是获得的下面两个值都是0 怎么办呢 改edit下面的projectsetting里面的input属性下面两个值的type都改成mouse movement
  • protobuf C#编译

    protobuf C 编译 标签 protobufc 2016 08 30 23 22 342人阅读 评论 1 收藏 举报 分类 工作记录 2 版权声明 本文为博主原创文章 未经博主允许不得转载 1 下载protobuf代码 https g
  • 闲云:unity中不能识别monobehevior关键字的问题

    有时候一些小问题很恼人 如unity中新建脚本后不能识别monobehevior关键字 在vs2017右侧的解决方案中点击刷新图标 或者把不能识别的脚本添加到vs2017右侧的解决方案中的Assets中即可 还不行就点击 排除 然后再 添加
  • Unity 导出XCode工程运行报错: ‘UnityFramework/UnityFramework.h‘ file not found

    简介 近期项目升级到2019 4 10f1版本 在用自动化打包的时候 遇到了一些问题 其中一个是 在导出XCode工程之后 运行工程的时候 编译报错 UnityFramework UnityFramework h file not foun
  • unity本地分数排行榜简单解决方案(Json)

    具体效果 大体方法 创建一个分数类Score和一个分数类的容器List
  • Unity里清除Console控制台Log的函数

    Log输出部分转发来自 http blog sina com cn s blog 13c4bf4b40102wz0r html 在控制台输出中 是开发者常用到的一种函数 通过Debug类来实现 打印字符串 Debug Log log 如果有
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • unity中的一些快捷键(齐)

    重命名的快捷键是F2 ALT 鼠标左键点击Hierarchy对象可以展开和收起对象的所有子物体 SHIFT 空格 可以对当前窗口进行放大缩小
  • Unity使用spine动画

    Unity使用spine动画 在 Unity 中 常常使用 Spine 来制作一些动画 引擎本身并不能直接播放 Spine 动画 需要额外导入一个 RunTime 插件库才能支持 官网插件导入 当然 也可以到 Spine 官网关于 Unit
  • Input.GetAxis _ Unity3d

    Input GetAxis 获取轴 static function GetAxis axisName string float Description描述 Returns the value of the virtual axis iden
  • [Unity XLua]热更新XLua入门(一)-基础篇

    Aladdin XLua 前言 前段时间腾讯开源了一个内部热更框架XLua在Unity开发群里引起一阵热议 也受到广大开发者的热捧 然后我当然也抱着好奇的心去学习学习 后面也会将扩展之后的工程放在git上 大家一起学习交流 在此感谢XLua
  • Unity3D:按键生成物件,Instantia…

    在按下按键之后 可以在画面中生成之前定义好了的物体 这里使用了Instantiate函数来生成 1 先在游戏中定一个空物件GameObject 创建空物件快捷键 ctrl shift n 2 在视图中放置 3 编写脚本 脚本 SpaceCh
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • NO.6——Unity3D中两种绘制小地图的方法

    在玩游戏时 你经常会发现 在游戏窗口的右上角或者左下角通常会有一个小地图 里边实时反馈角色的移动信息甚至是世界地图 那么这个小地图是如何绘制的呢 我目前掌握了两种方法 一种是以GUI方法重新绘制一个小窗口 另一种是新建一个正交投影的摄像机机

随机推荐

  • 如何使用PVRTexTool提升移动端图形效果

    导语 本文作者Ben Anuworakarn 是PowerVR 开发技术团队的技术作者 具有计算科学工程知识背景 文中 他针对移动端游戏画面的优化 介绍了图像纹理处理 Mipmapping以及渗色等相关技术 同时 通过充分利用PVRTexT
  • the propfind response did not include the requested properties

    从仓库检出代码客户端提示如下错误 the propfind response did not include the requested properties 这意味着 客户端的协议版本高于服务器的版本 server的协议没有client要
  • Spring注解之实体类常用注解

    import org hibernate annotations AccessType import org hibernate annotations import javax persistence import javax persi
  • 【CSRF攻击分析】

    目录 一 什么是CSRF漏洞 二 CSRF漏洞的原理和利用过程 三 CSRF漏洞的检测方法 四 攻击利用姿势 五 防护手段 一 什么是CSRF漏洞 CSRF即跨站点请求伪造 Cross Site Request Forgery 跟XSS攻击
  • 内测体验:GitHub Copilot智能代码补全自动写代码插件

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 概述 一大早起床 收到了GitHu
  • 工业数字智能化常用系统简介

    文章目录 QMS 1 IPQC 过程检 2 OQC 出货检 3 SPC 统计工序控制 4 Andon 安灯 5 其他 MDM MES QMS 质量管理体系 是Quality Management System 的简称 通常包括制定质量方针
  • Centos配置OpenVPN+OpenLDAP认证

    Centos配置OpenVPN OpenLDAP认证 一 安装openvpn auth ldap插件 二 配置ldap conf文件 三 配置openvpn中的server conf文件 四 配置客户端client ovpn文件 五 开启路
  • 计算机提示msvcp110.dll文件丢失下载安装修复教程

    电脑打开一个浏览器后在顶部网址栏目输入 dll修复程序 site 按下键盘的回车键打开前往 下载完成的修复工具需要对其进行压缩 解压好了以后打开工具 打开修复工具后 可以看到右边修复与检测的项目 点击一下开始检测电脑丢失的dll系统文件 检
  • 回来喂马啊

    继续回来喂马了 1 这么多天没更新的原因 断更也有一段时间了 近期实在是业务过于繁忙 上线了项目之后又开启了新的项目 确实很难顾得上 毕竟一下班回家就累的只想躺平哈哈哈哈 还有一个原因是新项目和后续的项目转用了SpringBoot Myba
  • ios中的锁

    代码测试可参考 只有实际写过才能更好的理解 在平时开发中我们经常会使用多线程 多线程为我们带来了很大便利 也提高了程序的执行效率 但同时也带来数据风险 当至少有两个线程同时访问同一个变量 而且至少其中有一个是写操作时 就发生了Data ra
  • java中栈的使用

    栈是什么 栈的定义 栈是我们经常使用的一种线性数据结构 它是只能通过一端操作的线性表 我们可以操作的一端称之为栈顶 另一端则称之为栈底 特点 栈通常和队列作比较 队列的特点是先进先出 栈的特点则是先进后出 举一个例子 比如说我们生活中洗碗
  • hdu 6181 Two Paths

    Problem acm hdu edu cn showproblem php pid 6181 Reference Dijkstra应用之次短路 2017 Multi University Training Contest 10 1011
  • 基于微信小程序的在线小说阅读系统,附数据库、教程

    1 功能简介 Java基于微信小程序的在线小说阅读系统 微信小程序的在线小说阅读系统 系统的整体功能需求分为两部分 第一部分主要是后台的功能 后台功能主要有小说信息管理 注册用户管理 系统系统等功能 微信小程序主要分为首页 分类和我的三部分
  • ArcSDE 日志文件表(一)

    今天跟大家介绍一下ArcSDE日志文件表 一直都想好好研究一下这块 因为基本上不太受大家重视 感兴趣的用户不是很多 但是一旦出现多用户并发查询或者版本操作的时候 这个东西就显得非常重要了 而且根据不同的用户场景设定不同的日志类型 对相关效率
  • HTTP超文本传输协议

    HTTP协议 超文本传输协议 注意 我们以后编写Servlet类时 不会直接继承GenericServlet类 因为我们是B S结构系统 这种系统是基于HTTP超文本传输协议的 他有一个专门的Servlet类 我们编程的时候要继承HttpS
  • esp8266 esp12 AT指令连接wifi热点联网,HTTP获取OneNET物联网平台消息,控制四路远程开关

    esp8266 esp12 使用AT指令联网非常方便 很适合应对已经开发好的成品需要增加联网功能的需求 使用AT指令进行开发 大多数是产品已经开发好 只需要增加小数据量的联网功能 而且不想对既有成品有较大的方案修改 下面来使用 esp826
  • AttributeError: 'generator' object has no attribute 'next'

    在python3 x版本中 python2 x的g next 函数已经更名为g next 所以只需要将g next 换成g next 就可以了 如果你觉得g next 太丑 使用next g 也能达到相同效果
  • CentOS7中使用yum安装Nginx的方法

    最近无意间发现Nginx官方提供了Yum源 因此写个文章记录下 1 添加源 默认情况Centos7中无Nginx的源 最近发现Nginx官网提供了Centos的源地址 因此可以如下执行命令添加源 sudo rpm Uvh http ngin
  • Ubuntu18.04下安装OpenCV4.2.0与Opencv_contrib(图文详细报错总结)

    Ubuntu18 04下安装OpenCV4 2 0与Opencv contrib 图文详细 前期准备 环境依赖 Cmake 编译器 依赖环境 Python环境 streamer环境 图像处理依赖 安装OpenCV 编译OpenCV 配置cm
  • Unity3d--AR/MR 技术

    一 作业要求 1 图片识别与建模 2 虚拟按键小游戏 3 开发城市定向越野运动 MR 游戏 可选 游戏要求 准备 选择为每个用户准备一套拼图图片 含干扰图片 按一定策略发布到目标位置 随机位置偏移 越野地图一张 开始游戏 玩家在起点 用手机