Unity+最新版Vuforia虚拟按钮

目录

前言

一、准备

二、创建虚拟按钮

 三、编写脚本

总结


前言

我们在做AR项目或者参加比赛的时候为了增强用户体验感,经常考虑做一个虚拟按钮的功能。个人比较喜欢用Vuforia,因为EasyAR有一个巨大的水印。初学者往往会被虚拟按钮的名字吓到,听着很高大上的名字,其实就是将普通的图像识别后的显示或消失事件改成了用户自定义的类似于按钮点击的事件。


 

一、准备

虚拟按钮其实就是图像识别,因此第一步我们需要找一张合适的图片(能识别的星级越高越好,最好三星以上)。

79e4f67b17904b2b93adc8d9b87c8655.png

 Vuforia图像识别的质量是根据图片的明暗度以及特征点来识别的,例如:

6b66f398df0449ef8d4818ea6128761f.png

 点击我们上传的需要识别的图片,点击下方的"Show Features"按钮可以看到最终Vuforia识别的图ee7c5a84b17843e2a1727c513ae6e44c.png

 即Vuforia判断图片是否为目标识别图与图片的颜色没有任何关系,首先都会被转化成黑白图,再进行进一步的比对。可以看到图中标出了目标识别图的特征点,这也是判断图片是否为目标图的第二步:根据特征点的位置和数量比对。显然以上这张图的特征点不是很多,因此它能被成功识别的概率相对较小,Vuforia给出了三星。

b6ac9ec11f8a42f9b8c63145be5284b0.png

 显然这张桃色K的特征点远多于上面那张图,这张图Vuforia给出了五颗星。通过对于我们可以发现特征点往往存在于图像中尖锐的拐点处,因此在选择识别图时尽量选择有尖锐的棱角,以及多棱角的图片,这样更能增加图像识别的正确性。这里也需要考虑到虚拟按钮的放置位置:既要符合项目需求又能做到高精度识别和美观。更多关于识别图的选择上请参考这位大佬的文章:Vuforia识别目标星级评分机制

 

二、创建虚拟按钮

在做好以上的准备工作后我们就可以下载Vuforia资源并导入Unity中了。

1.既然虚拟按钮就是建立在图像识别的基础上的,那么第一步,我们应该新建一个“ImageTarget”。

5d4a6deebc1f449094707a698c8327fc.png

2.在“ImageTarget”脚本中选择目标识别图所在的数据库,将ImageTarget设置为我们想要识别的图片。

4843d9f5dfe24213b7be7a8b6669bfa3.png

 3.给添加目标识别图添加虚拟按钮。展开上图中的“Advanced”,点击“Add Virtual Button”。然后我们就能发现ImageTarget下面多了一个VirtualButton。

755a70eb9cd24af3917adbabd376af1d.pngc6198696774a423390a7417e41102f22.png

 4.我们可以在Scene视图中看到出现了一个蓝色的矩形,这就是我们创建的虚拟按钮,我们可以手动调节按钮的位置和大小;在Inspector面板中可以设置按钮的名字以及识别的敏锐度。注意:当有多个按钮时可以在下面的脚本中通过这里设置的Name直接访问到对应的虚拟按钮。

0be917a4b0104b0d82d547fb691fc91d.png fe2e49ba5c1d4bdba6b4a0ba230deb53.png

 三、编写脚本

我们需要新建一个“VirtualButtonControl”脚本(名字自拟)放在对应的ImageTarget下面。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class VirtualButtonControl : MonoBehaviour
{
    //获取ImageTarget下所有VirtualButtonBehaviour组件(虚拟按钮自带的组件)
    VirtualButtonBehaviour[] vbs;            
    public GameObject text;
    // Start is called before the first frame update
    void Start()
    {
        text.SetActive(false);
        vbs = this.GetComponentsInChildren<VirtualButtonBehaviour>();
        for (int i = 0; i < vbs.Length; i++)
        {
            vbs[i].RegisterOnButtonPressed(OnButtonPressed);
            vbs[i].RegisterOnButtonReleased(OnButtonReleased);
        }
    }

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

    }
    //按钮被按下时
    private void OnButtonPressed(VirtualButtonBehaviour vb)
    {
        //通过VirtualButtonBehaviour下的VirtualButtonName属性即以上提到的Name属性获取对应的虚拟按钮
        if (vb.VirtualButtonName == "ShowText")
            text.SetActive(true);
    }
    //按钮释放时
    private void OnButtonReleased(VirtualButtonBehaviour vb)
    {

    }
}

将我们按钮按下(识别到然后被遮挡)和释放(遮挡然后再次识别到)时按照个人需求将事件写入以上注释下对应的函数中(例如以上当按钮ShowText按下时显示text物体),这样就实现了虚拟按钮的功能,是不是很简单呢?最后特别注意:若一张图片既要完成普通的图片识别功能又要出现虚拟按钮,例如图片识别后出现模型和虚拟按钮,虚拟按钮可能是对模型进行大小或者位置上的控制,那么这时一定一定要将模型放在虚拟按钮之上!!!

1cc90dbc8fd84a5fa836609f7b089a0a.png

 

 

总结

好啦,以上就是这篇文章的全部内容啦,小伙伴们有什么更好的方法欢迎留言一起讨论互相学习呀。博主有什么错误和不严谨的地方也欢迎大家提出,我一定及时纠正!!!最后感谢小伙伴看完这篇文章,希望对你有所帮助。

 

 

  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是使用VuforiaUnity实现最简单的虚拟按钮的步骤: 1. 创建一个新的Unity项目,导入Vuforia插件。 2. 在Vuforia开发者门户网站上创建一个新的AR应用程序,并下载使用UnityVuforia AR应用程序包。 3. 将Vuforia AR应用程序包导入Unity项目中。 4. 在场景中添加AR相机,然后将Vuforia的Image Target添加到场景中。 5. 选中Image Target,将其Image Target Behaviour组件中的Image Target Type设置为Predefined,并选择一个预定义的图像。 6. 在场景中创建一个Cube或其他形状的游戏对象,将其作为虚拟按钮。 7. 将虚拟按钮的位置和旋转与Image Target对齐。 8. 为虚拟按钮添加一个Box Collider组件并勾选Is Trigger。 9. 为虚拟按钮添加一个新的脚本,并在脚本中实现OnClick函数。例如: ``` public class VirtualButtonScript : MonoBehaviour, IVirtualButtonEventHandler { private VirtualButtonBehaviour virtualButton; void Start() { virtualButton = GetComponent<VirtualButtonBehaviour>(); virtualButton.RegisterEventHandler(this); } public void OnButtonPressed(VirtualButtonBehaviour vb) { // 当按钮被按下时执行的代码 } public void OnButtonReleased(VirtualButtonBehaviour vb) { // 当按钮被释放时执行的代码 } } ``` 10. 在虚拟按钮的GameObject上添加Virtual Button Behaviour组件,并将其设置为使用刚刚创建的脚本。 11. 运行应用程序,并在相机中将图像目标对准预定义的图像。当虚拟按钮被按下时,OnClick函数将被调用。 这就是实现最简单的虚拟按钮所需的步骤。您可以根据自己的需求进行扩展和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值