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
→ 右键单击 → 创建 → UI → Button 这会自动创建一个新的@ 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 元素缩放到适合每个分辨率的大小