AR/MR 技术
实践内容
1、 图片识别与建模
2、 虚拟按键小游戏
实践过程
图片识别与建模
使用Vuforia
-
注册登录(https://developer.vuforia.com/)
-
创建证书,用于获取License Key
-
创建目标数据库,用于对所有Target及其特征数据进行管理和保存
-
将单幅图像提前上传至数据库进行特征提取
上传成功
扩展AR功能
-
创建Unity新项目,在Vuforia官网中下载Unity扩展包,点击运行
将AR拓展文件放置在unity安装目录下,和unity.exe的保存目录相并列
创建一个新项目,File -> Build Setting -> Player Settings -> Player,勾选Vuforia Augmented Reality
此时可以找到Vuforia选项
以unity package形式从Target Manger页面下载目标数据库并导入项目 -
下载Target Manger页面的目标数据库并导入项目
导入 -
删除场景中原有的摄像机,导入Vuforia的ARCamera,此时会自动加载所需要的Assert,此时运行项目,可以看到场景为摄像头实景
-
在Assert/Resource下找到Vuforia配置文件,将证书管理器中获取的Key写入右侧方框
拷贝licence
找到Assert/resource下的Vuforia配置文件,Key写入右侧方框 -
创建一个ImageTarget,在下面创建一个子游戏对象Sphere
-
设置ImageTarget的type为Predefined,将看到看到数据库中的tree图片会自动导入
运行,检测到图片时,会出现Sphere
虚拟按键小游戏
-
将Vuforia的Virtual button预制体挂载到ImageTarget下作为子对象
点击ImageTarget,在右侧展开Advanced,点击Add Virtual Button
为了使虚拟按钮可见,可以在按钮下添加相应大小的平面并附着材质,物体的层次图
设置Sphere、VirtualButton,Plane的位置和大小如下 -
创建脚本:
实现IVuforiaButtonEventHandler接口,以监听并处理虚拟按钮的按下与释放事件。
每次按下按钮,Sphere都变换颜色,并向上移动,每点击5次回到原位置
挂载到ImageTarget下,可直接运行
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Vuforia;
public class ButtonEvent : MonoBehaviour, IVirtualButtonEventHandler
{
public VirtualButtonBehaviour[] vbs;
public GameObject sphere;
public GameObject button;
public Color[] colors;
public int index;
void Start()
{
vbs = GetComponentsInChildren<VirtualButtonBehaviour>();
for (int i = 0; i < vbs.Length; i++)
{
vbs[i].RegisterEventHandler(this);
}
index = 0;
colors = new Color[5];
colors[0] = Color.white;
colors[1] = Color.red;
colors[2] = Color.green;
colors[3] = Color.blue;
colors[4] = Color.yellow;
sphere = GameObject.Find("ImageTarget/Sphere");
button = GameObject.Find("ImageTarget/VirtualButton/Plane");
}
public void OnButtonPressed(VirtualButtonBehaviour vb)
{
if (index == 5)
{
index = 0;
//下移
sphere.transform.Translate(Vector3.down * Time.deltaTime * 1.5F);
}
else
{
sphere.transform.Translate(Vector3.up * Time.deltaTime * 0.3F);
}
//点击按钮,变换Sphere的颜色,并将其向上移动
sphere.GetComponent<Renderer>().material.color = colors[index];
index++;
Debug.Log("按钮按下");
}
public void OnButtonReleased(VirtualButtonBehaviour vb)
{
Debug.Log("按钮释放");
}
}
- 结果
来源:CSDN
作者:Zhaomy8
链接:https://blog.csdn.net/Zhaomy8/article/details/103738205