AR/MR技术

旧城冷巷雨未停 提交于 2020-01-12 17:32:46

AR/MR 技术

实践内容

1、 图片识别与建模
2、 虚拟按键小游戏

实践过程

图片识别与建模

使用Vuforia

  • 注册登录(https://developer.vuforia.com/)

  • 创建证书,用于获取License Key
    创建licence
     创建证书

  • 创建目标数据库,用于对所有Target及其特征数据进行管理和保存
    创建数据库

  • 将单幅图像提前上传至数据库进行特征提取
    上传图像
    上传成功
    上传成功

扩展AR功能

  • 创建Unity新项目,在Vuforia官网中下载Unity扩展包,点击运行
    运行
    将AR拓展文件放置在unity安装目录下,和unity.exe的保存目录相并列
    保存文件
    创建一个新项目,File -> Build Setting -> Player Settings -> Player,勾选Vuforia Augmented Reality
    勾选
    此时可以找到Vuforia选项
    ar camera
    以unity package形式从Target Manger页面下载目标数据库并导入项目

  • 下载Target Manger页面的目标数据库并导入项目
    下载数据库
    导入
    导入包
    导入

  • 删除场景中原有的摄像机,导入Vuforia的ARCamera,此时会自动加载所需要的Assert,此时运行项目,可以看到场景为摄像头实景
    ar camera

  • 在Assert/Resource下找到Vuforia配置文件,将证书管理器中获取的Key写入右侧方框
    拷贝licence查看licence
    找到Assert/resource下的Vuforia配置文件,Key写入右侧方框
    证书
    写入证书

  • 创建一个ImageTarget,在下面创建一个子游戏对象SphereImageTarget
    Sphere
    Sphere

  • 设置ImageTarget的type为Predefined,将看到看到数据库中的tree图片会自动导入
    type
    运行,检测到图片时,会出现Sphere
    出现

虚拟按键小游戏

  • 将Vuforia的Virtual button预制体挂载到ImageTarget下作为子对象
    点击ImageTarget,在右侧展开Advanced,点击Add Virtual Button
    button
    为了使虚拟按钮可见,可以在按钮下添加相应大小的平面并附着材质,物体的层次图
    层次图
    设置Sphere、VirtualButton,Plane的位置和大小如下
    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("按钮释放");
    }
}

  • 结果
    结果

视频

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!