《AR与VR开发实战》——2.10 虚拟按钮

简介:

本节书摘来自华章出版社《AR与VR开发实战》一书中的第2章,第2.10节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.10 虚拟按钮

使用Vuforia实现增强现实之后,有时需要与这些虚拟模型进行交互,同时为了使交互方式更加魔幻,我们期望可以在真实的识别图像上进行点击,从而触发App中的某些行为。Vuforia SDK为我们提供了Virtual Button功能来实现这样的交互,本节我们将带领大家使用这一特性实现两个模型之间的切换。
1.插件下载
访问https://developer.vuforia.com/downloads/sdk,进入如下界面,并下载Vuforia SDK的Unity版本。


6fba8107346de74876c32a73f39a6498590e0ee1

2.创建Unity工程
新建一个Unity工程并将下载好的插件导入Unity,同时将识别图数据包导入该工程。
3.场景搭建
首先删除场景中的Main Camera,接着从Vuforia→Prefabs中将ARCamera和ImageTarget拖入场景,在ARCamera的Inspector面板下添加App License Key,并激活当前识别图信息。


c0cedb378883264974ac195792dd6a127086b507

然后在ImageTarget的Inspector面板下设置相应识别图信息。
接着在ImageTarget下分别创建一个Cube和一个Sphere,并将Project视图中Vuforia→
Prefabs下的Virtual Button预制件拖入ImageTarget。这里将Cube的棱长设置为0.3,将Sphere的半径设置为0.4,然后使它们的位置相同。为了便于观察,我们新建两个材质球,分别将Cube和Sphere设置为不同的颜色。最后在Virtual Button的Inspector界面里分别设置两个Virtual Button的名字。

  


4ea237fcceafb5a5bd9901c002ccadd8104cdbbf

4.脚本编写
在Project下新建一个C#脚本,命名为VirtualButtonTest.cs,并在脚本中添加以下代码:
using UnityEngine;
using System.Collections.Generic;
using Vuforia;

public class VirtualButtonTest: MonoBehaviour,IVirtualButtonEventHandler
{

void Start () 
{
}

public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) { }

public void OnButtonReleased(VirtualButtonAbstractBehaviour vb) { }
AI 代码解读

}
该类的作用是实现IVirtualButtonEventHandler这个接口,该接口中定义了OnButton Pressed和OnButtonReleased两个方法,这两个方法能够监听虚拟按键的按下和释放事件。为了触发这两个事件,我们还需要将之前添加的两个VirtualButton对象注册到事件系统中,因此需要在Start()方法中查找这两个物体,并调用VirtualButtonBehaviour类中的RegisterEventHandler方法将当前对象作为参数传入,具体的代码实现如下:
void Start ()
{

//在所有子物体类中找到所有VirtualButtonBehaviour组件
VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour>();
for (int i = 0; i < vbs.Length; ++i)
{
    //在虚拟按钮中注册TrackableBehaviour事件
    vbs[i].RegisterEventHandler(this);
}
AI 代码解读

}
接下来在当前类中创建两个GameObject类型的字段,分别对应之前创建的立方体和球体。
private GameObject cube;
private GameObject sphere;
接着在Start方法中查找这两个物体并赋值给相应的字段。
cube = transform.FindChild("Cube").gameObject;
sphere = transform.FindChild("Sphere").gameObject;
在程序开始的时候,我们希望它们都不显示,所以要先把它们藏起来。这就是Start方法的最后一步需要做的事情:
cube.SetActive(false);
sphere.SetActive(false);
现在我们开始实现OnButtonPressed方法中的功能,此方法的唯一一个参数vb是VirtualButtonAbstractBehaviour类型。在这个参数中可以获取被按下的虚拟按键的名称VirtualButtonName,将传递的名称和场景中创建的名称进行对比,就可以知道我们具体按下的是哪一个虚拟按键,具体代码实现如下:
switch (vb.VirtualButtonName)
{

case "showCube":
    cube.SetActive(true);
    break;
case "showSphere":
    sphere.SetActive(true);
    break;
AI 代码解读

}
同理,OnButtonReleased实现方法基本相同,代码如下:
switch (vb.VirtualButtonName)
{

case "showCube":
    cube.SetActive(false);
    break;
case "showSphere":
    sphere.SetActive(false);
    break;
AI 代码解读

}
5.功能实现
运行Unity并扫描识别图,由于我们在最开始将两个物体隐藏起来了,所以看不到东西。


d5f4fccf1ef0f4e79515224d28247282ba295ec5

当我们“按下”左边的showCube按钮时,画面如下。


2b3962ac6c95266cb1424feb124433e2d0ed680d

接着,我们“按下”右边的showSphere按钮,效果如下。


f696efd6a2d65fc408b98cc25030eae87ebe1e4f

到此,VirtualButton功能实现完毕。
关于虚拟按钮,有以下几点需要注意:
本节只是实现了一个简单的功能,大家可以根据自己的需求自定义VirtualButton事件。
可以使用PS等图像处理软件给识别图加上虚拟按钮的图像,这样会更直观。
为了达到更好的体验效果,识别图可以复杂一些,尤其是在虚拟按钮的位置。
目录
打赏
0
0
0
0
1408
分享
相关文章
【虚拟现实】二、主要的AR/VR硬件设备
【虚拟现实】二、主要的AR/VR硬件设备
166 3
惊呆了!这些前端技巧竟然能让你的网站支持AR/VR体验!
【10月更文挑战第31天】在数字化时代,用户对网页交互体验的要求日益提高,传统二维网页已难以满足需求。本文介绍如何利用前端技术,特别是Three.js,实现AR/VR体验,提升用户满意度和网站价值。通过示例代码,展示如何创建简单的3D场景,并探讨AR/VR技术的基本原理和常用工具,帮助开发者打造沉浸式体验。
235 6
重塑体验:AR/VR技术在游戏与娱乐行业的创新应用
【10月更文挑战第29天】本文探讨了AR/VR技术如何改变游戏与娱乐行业,介绍了AR和VR的基本概念及其在游戏和娱乐中的应用实例,包括《精灵宝可梦GO》的AR开发和VR视频播放器的实现代码,并展望了未来的发展趋势。
323 2
5G赋能沉浸式体验:VR/AR时代的网络基石
5G赋能沉浸式体验:VR/AR时代的网络基石
150 1
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
147 1
VR与AR:未来的科技趋势
【8月更文挑战第26天】VR与AR技术正以前所未有的速度发展,并在市场规模、技术创新、应用场景以及竞争格局等方面展现出强劲的增长潜力。随着技术的不断进步和应用场景的不断拓展,VR/AR/MR技术将为人们带来更加丰富的虚拟体验和更加便捷的生活方式。未来,我们有理由相信,VR与AR技术将在多个领域实现更广泛的应用和更深入的融合,成为推动社会进步的重要力量。
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
282 0
虚拟现实(VR)与增强现实(AR)的技术革新:塑造未来的沉浸式体验
【7月更文挑战第24天】VR和AR作为两种前沿的沉浸式技术,正以前所未有的速度改变着我们的世界。随着技术的不断革新和应用的不断拓展,我们有理由相信,未来的VR和AR将为我们带来更多令人惊叹的体验和技术革新。
|
9月前
|
AR和VR的光学结构分别是什么?
【6月更文挑战第25天】AR和VR的光学结构分别是什么?
319 5
|
9月前
|
AR和VR
【6月更文挑战第25天】AR和VR
162 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等