如何利用Vuforia6.2.10,在Unity中来实现AR中的虚拟按钮功能

时间:2024-05-18 12:13:32

我们在开发一些AR应用的时候有时候会需要与识别图进行一些简单的交互,这就可以利用.Vuforia自带的VirtualButton功能来利用识别图和虚拟物体有一个简单的交互

步骤:

1.首先导入Vuforia,这里使用的是Vuforia6.2.10的版本,Unity2017.1.0f3。

2.将识别图的数据包导入该工程。

3.删除原始场景中的MainCamera,再从Vuforia-Perfabs中将ARCamera和ImageTarget拖到场景

4.在ARCamera的Inspector中 找到其上的VuforiaBehaviour组件,并点击OpenVuforiaConfiguration进入编辑界面。 在AppLicenseKey 中输入LicenseKey,并将Datasets中的LoadxxDatabase勾选(xx为你的DatabaseName),其余设置可按需要设置。

5.然后设置ImageTarget。

(白色的ImgTarget

如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

这里需要在Assets-Editor-Vuforia-ImageTargetTextures-xx(DatabaseName) 中,找到识别图,将其TextureShape改成2D即可

 )

 如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

 )

如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能


6.将Vuforia-Perfabs 中的VirtualButton 拖到场景中,拖到指定的位置。图中浅蓝色的位置是按下VirtualButton可以生效的位置。

如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

 

7.假设我们需要按键来控制方块的颜色,首先新建脚本,这个脚本目的是来控制VirtualButton。

8.设置一个tag,为了便于找到目标立方体,也就是图中的黄色立方体,需要在脚本中控制他的颜色。建立这个脚本名字为VirtualBTCtrl,同时也是这个类的名字,需要用到命名空间Vuforia, 这个类不仅需要继承自MonoBehaviour,还需要实现接口IVirtualButtonEventHandler,

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using Vuforia;

 

public class VirtualBTCtrl : MonoBehaviour,IVirtualButtonEventHandler

{

...

 

public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)

     {

     }

 

     public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)

     {

}

 

}

其中需要实现

public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)

    {

//Code

    }

 

    public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)

{

//Code

}

这两个方法 ,这两个方法用来监听虚拟按键按下和释放的事件。为了触发这个事件,我们要将之前添加的VirtualButton对象注册到时间系统。所以需要在Start方法中寻找所有的VirtualButtonBehaviour组件并利用其RegisterEventHandler方法将当前对象,也就是重载了上面两个函数的脚本的对象 作为参数传入。 

在Start方法中获得所有子物体(这个脚本挂在ImageTarget上,VirtualButton是其子物体)的VirtualButtonBehaviour组件:

 VirtualButtonBehaviour[] vbBehaviours = this.GetComponentsInChildren<VirtualButtonBehaviour>();

        for (int i = 0; i < vbBehaviours.Length; i++)

        {

            vbBehaviours[i].RegisterEventHandler(this);   //注册所有的vb事件

        }

 

之后便可以在OnButtonPressed 和 OnButtonReleased 中实现我们需要的功能

不过在判断是哪一个按键被按下时需要用一个switch-case结构,判断按下的按键的名称(VirtualButtonName),这个VirtualButtonName 在每个VirtualButton上的Inspector面板中的VirtualButtonBehaviour面可以修改。

 如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

 

 

public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)

{

    //mat是在start方法中获得的立方体的材质

        switch (vb.VirtualButtonName)

        {

            case "VirtualButton_R": mat.color = Color.red;

                break;

            case "VirtualButton_G": mat.color = Color.green;

                break;

            case "VirtualButton_B": mat.color = Color.blue;

                break;

            default:

                break;

        }

 

    }

 

    public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)

    {

        mat.color = Color.yellow;

    }

 

9.最后把我们写的VirtualBTCtrl脚本拖到ImageTarget下。

 

10.结果

 如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能

如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能


注:

 如何利用Vuforia6.2.10,在Unity2017中来实现AR中的虚拟按钮功能


虚拟按键的位置尽量在识别图中的识别点比较多的地方,这样识别效果会比较好。

 

本文内容参考加速想象力出版的ARVR开发实战教程