Unity - 检测到目标时如何弹出 GUI 按钮

Posted

技术标签:

【中文标题】Unity - 检测到目标时如何弹出 GUI 按钮【英文标题】:Unity - How can I popup a GUI button when a target is detected 【发布时间】:2021-05-05 05:40:24 【问题描述】:

我是 Unity 和 Vuforia 的新手。我正在尝试创建一种增强现实体验,用户可以在其中扫描目标标记,它会显示一个他们可以单击的按钮。我找到了几个程序,但它会引发与 ITrackableEventHandler 相关的错误。

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

using UnityEngine;
using System.Collections;

public class ButtonPopup : MonoBehaviour, ITrackableEventHandler 
    
    private TrackableBehaviour mTrackableBehaviour;
    
    private bool mShowGUIButton = false;
    private Rect mButtonRect = new Rect(50,50,120,60);
    
    void Start () 
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour)
        
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
        
    
    
    public void OnTrackableStateChanged(
                                    TrackableBehaviour.Status previousStatus,
                                    TrackableBehaviour.Status newStatus)
    
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED)
        
            mShowGUIButton = true;
        
        else
        
            mShowGUIButton = false;
        
    
    
    void OnGUI() 
        if (mShowGUIButton) 
            // draw the GUI button
            if (GUI.Button(mButtonRect, "Hello")) 
                // do something on button click 
            
        
    

【问题讨论】:

你尝试了什么来解决这个非常清晰的错误消息(ITrackableEventHandler未知)? 【参考方案1】:

我认为您可能缺少类似的命名空间

using Vuforia;

afaik RegisterTrackableEventHandler 已弃用,现在它是 RegisterOnTrackableStatusChanged,不需要接口,也许它也已弃用)

OnGUI(也是IMGUI)几乎已经过时/遗留,主要仅用于编辑器脚本和非常非常快速和肮脏的原型设计......而不是使用"new" UI System (uGUI)使用UI package,然后只使用@987654329 @

因此,首先您需要在场景中的某个位置的Canvas 中设置Button。如果你通过Hierarchy View右键单击创建UIButton 这会自动创建一个新的@ 987654333@ 如果您目前还没有,请添加一个 Button。

而且代码有点像

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);
    

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

【讨论】:

以上是关于Unity - 检测到目标时如何弹出 GUI 按钮的主要内容,如果未能解决你的问题,请参考以下文章

Unity,NGUI如何像GUI一样,点击按钮后弹出一个窗体呢

Unity 4.6 - 如何将 GUI 元素缩放到适合每个分辨率的大小

unity点击按钮弹出文字

Unity3d怎么做到游戏中按下一个按钮,弹出窗口

Unity3D js脚本怎么实现点击一个按钮,弹出另一个;再点击原按钮,弹出的按钮关闭

Unity3d 4.6 GUI - 按钮单击脚本从预制中消失