如何在仅按下一个虚拟按钮后停用 Vuforia 中的所有虚拟按钮?

How do I deactivate all the virtual buttons in Vuforia after pressing just one?

下午好!

我正在尝试制作一个简单的 AR 问答游戏,需要虚拟按钮来回答。如果按下正确的按钮,游戏将继续。

问题是:如何在按下虚拟按钮时停用所有虚拟按钮? 我已经查看了几乎所有与此相关的主题,但无法弄清楚如何进行这项工作。 此时我可以按所有按钮,但只能按一次。

提前致谢(抱歉我的英语不好)!

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

public class PushToDebug : MonoBehaviour, IVirtualButtonEventHandler
{
public string vbName;
public AudioSource audi;


void Start()
{
    //Register with the virtual buttons TrackableBehaviour
    VirtualButtonBehaviour[] vrb = GetComponentsInChildren<VirtualButtonBehaviour>();
    audi = GetComponent<AudioSource>();

    for (int i = 0; i < vrb.Length; i++)
        vrb[i].RegisterEventHandler(this);
}

public void OnButtonPressed(VirtualButtonBehaviour vb)
{
    vbName = vb.VirtualButtonName;

        if (vbName == "VB1")
        {
         Debug.Log("Button 1 is pressed!");
         audi.Play();
         vb.GetComponent<VirtualButtonBehaviour>().enabled = false;

        }

        else if (vbName == "VB2")
        {
            Debug.Log("Button 2 is pressed!");
            audi.Play();
            vb.GetComponent<VirtualButtonBehaviour>().enabled = false;
        }

        else 
        {
            Debug.Log("Button 3 is pressed!");
            audi.Play();
            vb.GetComponent<VirtualButtonBehaviour>().enabled = false;
        }
}


public void OnButtonReleased(VirtualButtonBehaviour vb)
    {
        if (vbName == "VB1")
        {
            Debug.Log("Button 1 is released!");
        }

        else if (vbName == "VB2")
        {
         Debug.Log("Button 2 is released!");
        }

        else
        {
        Debug.Log("Button 3 is released!");
        }
    }
}

感谢您的回复! 由于某些奇怪的原因,它不仅有效。

我添加了Debug.Log("DeactivateButtons is called!");,但根本没有调用此方法。

看起来您在按下时仅禁用了一个按钮,而其他按钮仍处于活动状态。您可以添加一个功能来检查是否按下了任何按钮,以便您可以停用它们。 或者因为您在按下时找到按钮的名称,那么您可能可以创建 3 个变量,例如:

var VB1 = GameObject.Find("VB1");
var VB2 = GameObject.Find("VB2");
var VB3 = GameObject.Find("VB3");
if(VB1 != null && VB2 != null && VB3 != null){

    VB1.GetComponent<VirtualButtonBehavior>().enabled = false;
    VB2.GetComponent<VirtualButtonBehavior>().enabled = false;
    VB3.GetComponent<VirtualButtonBehavior>().enabled = false;
}

现在将以上内容集成到您的代码中,也许在 OnButtonPressed() 函数下;您可以添加:

public void OnButtonPressed(VirtualButtonBehaviour vb)
{
    vbName = vb.VirtualButtonName;

        if (vbName == "VB1")
        {
         Debug.Log("Button 1 is pressed!");
         audi.Play();
         vb.GetComponent<VirtualButtonBehaviour>().enabled = false;
         DeactivateButtons();

        }

        else if (vbName == "VB2")
        {
            Debug.Log("Button 2 is pressed!");
            audi.Play();
            vb.GetComponent<VirtualButtonBehaviour>().enabled = false;
            DeactivateButtons();
        }

        else 
        {
            Debug.Log("Button 3 is pressed!");
            audi.Play();
            vb.GetComponent<VirtualButtonBehaviour>().enabled = false;
            DeactivateButtons();
        }
}

public void DeactivateButtons()
{
   var VB1 = GameObject.Find("VB1");
   var VB2 = GameObject.Find("VB2");
   var VB3 = GameObject.Find("VB3");
   if(VB1 != null && VB2 != null && VB3 != null){

      VB1.GetComponent<VirtualButtonBehavior>().enabled = false;
      VB2.GetComponent<VirtualButtonBehavior>().enabled = false;
      VB3.GetComponent<VirtualButtonBehavior>().enabled = false;
   }
}