Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity-当检测到目标时,如何弹出GUI按钮_C#_Unity3d_Augmented Reality_Vuforia - Fatal编程技术网

C# Unity-当检测到目标时,如何弹出GUI按钮

C# Unity-当检测到目标时,如何弹出GUI按钮,c#,unity3d,augmented-reality,vuforia,C#,Unity3d,Augmented Reality,Vuforia,我是新来的统一和Vuforia。我正在尝试创建一个增强现实体验,用户可以扫描一个目标标记,它将显示一个按钮,他们可以点击。我发现了几个程序,但它抛出了一个与ITrackableEventHandler相关的错误 错误:Assets\scripts\ButtonPopup.cs(5,43):错误CS0246:找不到类型或命名空间名称“ITrackableEventHandler”(是否缺少using指令或程序集引用? 使用UnityEngine; 使用系统集合; 公共类ButtonPup:Mono

我是新来的统一和Vuforia。我正在尝试创建一个增强现实体验,用户可以扫描一个目标标记,它将显示一个按钮,他们可以点击。我发现了几个程序,但它抛出了一个与ITrackableEventHandler相关的错误

错误:Assets\scripts\ButtonPopup.cs(5,43):错误CS0246:找不到类型或命名空间名称“ITrackableEventHandler”(是否缺少using指令或程序集引用?

使用UnityEngine;
使用系统集合;
公共类ButtonPup:MonoBehavior,ITrackableEventHandler{
私人可追踪行为;
private bool mShowGUIButton=false;
private Rect mbutnotrect=新Rect(50,50120,60);
无效开始(){
mtrackablebhavior=GetComponent();
if(MTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(
可跟踪行为。状态优先状态,
可跟踪的行为。状态(状态)
{
if(newStatus==trackablebehavior.Status.DETECTED||
newStatus==trackableBehavior.Status.TRACKED)
{
mShowGUIButton=true;
}
其他的
{
mShowGUIButton=false;
}
}
void OnGUI(){
如果(mshowgui按钮){
//绘制GUI按钮
if(GUI.Button(mbutnotrect,“Hello”)){
//按一下按钮做些什么
}
}
}
}
  • 我认为您可能缺少一个名称空间,例如

    using Vuforia;
    
  • 假设
    RegisterTrackableEventHandler
    已被弃用,现在它是
    registerTrackableStatusChanged
    而不需要该接口(也可能已弃用)

  • OnGUI
    (也是IMGUI)是非常过时/遗留的,主要用于编辑器脚本和非常快速和肮脏的原型制作。。而是使用,然后只使用
    SetActive

所以首先你需要在场景的某个地方设置一个。如果您通过
层次结构视图
→ 右击→ 创造→ 用户界面→ 按钮如果到目前为止还没有画布,则此按钮会自动创建一个新的
画布
,并向其中添加一个按钮

代码有点像

using UnityEngine;
using System.Collections;
using Vuforia;
using UnityEngine.UI;

public class ButtonPopup : MonoBehaviour
{    
    [SerializeField] private TrackableBehaviour _trackableBehaviour;
    
    // Reference your Button via the Inspector
    [SerializeField] private Button _button;
    
    private void Start () 
    {
        if(!_trackableBehaviour)
        {
            if(!TryGetComponent<TrackableBehaviour>(out  _trackableBehaviour))
        {
            Debug.LogError("No TrackableBehavior!", this);
            return;
        }

        _trackableBehaviour.RegisterOnTrackableStatusChanged(OnTrackableStateChanged);
    }
    
    private void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        _button.gameObject.SetActive(newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED);
    }
}
使用UnityEngine;
使用系统集合;
使用Vuforia;
使用UnityEngine.UI;
公共类按钮PUP:单行为
{    
[SerializeField]私有可跟踪行为\u可跟踪行为;
//通过检查器参考您的按钮
[序列化字段]专用按钮\u按钮;
私有void开始()
{
如果(!\u可跟踪行为)
{
if(!TryGetComponent(输出可跟踪行为))
{
LogError(“无可跟踪行为!”,this);
返回;
}
_TracableBehavior.RegisterOnTracableStatusChanged(OnTracableStateChanged);
}
private void OnTrackableStateChanged(TrackableBehavior.Status previousStatus,TrackableBehavior.Status newStatus)
{
_button.gameObject.SetActive(newStatus==trackablebehavior.Status.DETECTED | | newStatus==trackablebehavior.Status.TRACKED);
}
}

当然,如果你真的有你的理由,你可以坚持使用
OnGUI
。这真的不是最先进的;)

你是如何解决这个非常清晰的错误消息的(
ITrackableEventHandler
未知)?
using UnityEngine;
using System.Collections;
using Vuforia;
using UnityEngine.UI;

public class ButtonPopup : MonoBehaviour
{    
    [SerializeField] private TrackableBehaviour _trackableBehaviour;
    
    // Reference your Button via the Inspector
    [SerializeField] private Button _button;
    
    private void Start () 
    {
        if(!_trackableBehaviour)
        {
            if(!TryGetComponent<TrackableBehaviour>(out  _trackableBehaviour))
        {
            Debug.LogError("No TrackableBehavior!", this);
            return;
        }

        _trackableBehaviour.RegisterOnTrackableStatusChanged(OnTrackableStateChanged);
    }
    
    private void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        _button.gameObject.SetActive(newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED);
    }
}