《AR与VR开发实战》——2.10 虚拟按钮-阿里云开发者社区

开发者社区> 华章计算机> 正文

《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) { }

}
该类的作用是实现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);
}

}
接下来在当前类中创建两个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;

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

case "showCube":
    cube.SetActive(false);
    break;
case "showSphere":
    sphere.SetActive(false);
    break;

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


d5f4fccf1ef0f4e79515224d28247282ba295ec5

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


2b3962ac6c95266cb1424feb124433e2d0ed680d

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


f696efd6a2d65fc408b98cc25030eae87ebe1e4f

到此,VirtualButton功能实现完毕。
关于虚拟按钮,有以下几点需要注意:
本节只是实现了一个简单的功能,大家可以根据自己的需求自定义VirtualButton事件。
可以使用PS等图像处理软件给识别图加上虚拟按钮的图像,这样会更直观。
为了达到更好的体验效果,识别图可以复杂一些,尤其是在虚拟按钮的位置。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
安卓开发_单选按钮控件(RadioButton)的简单使用
最近复习安卓基础的时候发现没有写关于单选按钮、复选按钮的博客,可能因为以前学习的时候感觉太简单了就没有写,现在补上吧   当我们在各种客户端注册账号的时候,会有几项单选项,比如选择您的性别。下面就是学习怎么实现这种效果   一、安卓中,单选按钮用RadioButton表示,因为RadioBu...
986 0
《大数据存储:MongoDB实战指南》一导读
多年来,我一直在和数据库存储技术打交道,深知数据存储技术在整个IT系统中起着至关重要的作用,尤其是随着云计算时代的到来,所有企业都面临着海量的数据信息,如何处理这些数据成为当前研究的热点。在过去二十几年中,数据的存储是关系数据库的天下,它以高效、稳定、支持事务的优势几乎统治了整个行业的存储业务;但是随着互联网的发展,许多新兴产业如社交网络、微博、数据挖掘等业务快速增长,数据规模变得越来越庞大,高效存储、检索、分析这些海量的数据,关系数据库变得不再适用。
1772 0
关于安卓开发使用AlertDialog实现按钮对话框
AlertDialog 类的功能非常强大,它不仅可以生成带按钮的提示对话框,还可以生成带列表的对话框。 使用AlertDialog实现对话框建一个layout文件 alert.xml  添加一个按钮 命名为:显示带取消中立确定按钮的对话框建一个activity  AlertDialog_lianxi.
702 0
Search 通过 Kibana—Elastic Stack 实战手册
在 TO B 行业,对商品的搜索展示,是有一定业务要求的,例如:存在合作关系的买家和供应商才能看到供应商店铺的商品,不存在合作关系的买家则不展示商品。另外,有些商品对客户甲展示一种价格,对客户乙则展示另外一种价格,从而区分不同的会员、分组对商品价格的区别。
107 0
《React Native移动开发实战》一一1.6 小 结
本节书摘来自华章出版社《React Native移动开发实战》一 书中的第1章,第1.6节,作者:袁林 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
789 0
《Xcode实战开发》——导读
本节书摘来自异步社区《Xcode实战开发》一书中的目录,作者 【美】Maurice Kelly , Joshua Nozzi,更多章节内容可以访问云栖社区“异步社区”公众号查看
1349 0
Linux Ubuntu实战安装Kafka集群管理器 Kafka Manager
Linux Ubuntu实战安装Kafka集群管理器 Kafka Manager经验分享,详细步骤。
2294 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载