C# Unity-当检测到目标时,如何弹出GUI按钮
我是新来的统一和Vuforia。我正在尝试创建一个增强现实体验,用户可以扫描一个目标标记,它将显示一个按钮,他们可以点击。我发现了几个程序,但它抛出了一个与ITrackableEventHandler相关的错误 错误:Assets\scripts\ButtonPopup.cs(5,43):错误CS0246:找不到类型或命名空间名称“ITrackableEventHandler”(是否缺少using指令或程序集引用?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
使用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
- 而
(也是IMGUI)是非常过时/遗留的,主要用于编辑器脚本和非常快速和肮脏的原型制作。。而是使用,然后只使用OnGUI
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);
}
}