Unity3D课程——AR技术之虚拟按键小游戏

图片识别与建模

环境配置

  • SDK下载
    登录Vuforia官网下载图中标注出的SDK,下载后运行安装程序将其安装到与Unity的Editor同级的目录下
    Unity3D课程——AR技术之虚拟按键小游戏_第1张图片

  • Unity设置

  1. 打开Unity创建项目后,右键hierarchy栏,可以看到多出一项Vuforia Engine
    Unity3D课程——AR技术之虚拟按键小游戏_第2张图片

  2. 删除原有Camera,点击创建一个ARCamera;查看其Inspector界面,可以看到其Vuforia Behavior一栏是不可操作的
    Unity3D课程——AR技术之虚拟按键小游戏_第3张图片

  3. 根据其所给提示,打开build settings -> PC,Mac & Linux Standalone -> Player Settings,在其显示的Inspector界面的XR Settings进行如下配置
    Unity3D课程——AR技术之虚拟按键小游戏_第4张图片
    设置完成后可以对该元件进行修改,点击打开Configuration
    在这里插入图片描述

  4. 进入界面后对两处进行配置
    Unity3D课程——AR技术之虚拟按键小游戏_第5张图片
    首先点击add license进入其官网,点击get development key,下图已经创建好一个license manager,点击进入即可查看到自己的license key,将其拷贝到unity的license key框中即可
    Unity3D课程——AR技术之虚拟按键小游戏_第6张图片
    其次创建DataBase,同样下图已经创建好了一个database
    Unity3D课程——AR技术之虚拟按键小游戏_第7张图片
    点击进入创建好的database,点击add target创建新的target
    Unity3D课程——AR技术之虚拟按键小游戏_第8张图片
    target设置画面如下,添加后会对提供的照片进行处理,星级越高的照片代表效果越好,一般来说使用边缘分明的更容易识别,所以我在上传时选择了类似几何图形和像素图片的照片
    Unity3D课程——AR技术之虚拟按键小游戏_第9张图片
    下载database为unity的package,将其导入项目
    Unity3D课程——AR技术之虚拟按键小游戏_第10张图片
    之前的configuration中的DataBases会自动检测到导入的database
    Unity3D课程——AR技术之虚拟按键小游戏_第11张图片
    至此环境配置基本完成

图片识别

  • 创建image Target
    Unity3D课程——AR技术之虚拟按键小游戏_第12张图片
  • 在创建的Image Target的inspectors界面中配置如下,即将之前导入的target作为参数
    Unity3D课程——AR技术之虚拟按键小游戏_第13张图片
  • 将要识别的对象挂载到Image Target下,这里方便起见直接挂了个sphere
    Unity3D课程——AR技术之虚拟按键小游戏_第14张图片
  • 点击运行即可(PC要有摄像头才能够有画面),效果如下:
    Unity3D课程——AR技术之虚拟按键小游戏_第15张图片
    Unity3D课程——AR技术之虚拟按键小游戏_第16张图片

虚拟按键小游戏

  • 添加虚拟按键,点击下图中的Add Virtual Button即在Image Target下生成一个虚拟按键子对象

Unity3D课程——AR技术之虚拟按键小游戏_第17张图片

  • 对虚拟按键简单设置位置等参数,简单起见使其覆盖识别图
    Unity3D课程——AR技术之虚拟按键小游戏_第18张图片
  • 编写脚本,简单实现改点击虚拟按钮随机改变物体颜色的功能,其代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class move : MonoBehaviour, IVirtualButtonEventHandler
{
    private GameObject sphere;
    public float step = 1f;
    private Color[] color = { Color.red, Color.blue, Color.yellow, Color.black };
    private System.Random rd = new System.Random();

    void IVirtualButtonEventHandler.OnButtonPressed(VirtualButtonBehaviour vbb) {
        int index = (int)rd.Next(4);
        sphere.GetComponent().material.color = color[index];
        Debug.Log(color[index]);
    }

    void IVirtualButtonEventHandler.OnButtonReleased(VirtualButtonBehaviour vbb) {
        Debug.Log("released");
    }

    // Start is called before the first frame update
    void Start()
    {
        VirtualButtonBehaviour[] vbbs = GetComponentsInChildren();
        foreach(var vbb in vbbs) {
            vbb.RegisterEventHandler(this);
        }

        sphere = transform.Find("Sphere").gameObject;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

  • 运行视频传送门

你可能感兴趣的:(学习,Unity,游戏)