C# Unity和Vuforia:目标图像ID和GUI窗口

C# Unity和Vuforia:目标图像ID和GUI窗口,c#,unity3d,augmented-reality,vuforia,C#,Unity3d,Augmented Reality,Vuforia,我正在使用Unity和Vuforia为我的桌面RPG小组制作一个秘密项目。现在,我遇到了一个问题:Vuforia网站上缺少参考资料,删除了网页 目前,我的问题是:我想跟踪多达5个目标图像,并且在扫描时,让每个目标图像都创建自己的GUI窗口,以跟踪UI中的图像。我有它的一部分工作,我可以跟踪所有的图像,但一次只有一个窗口出现。我知道实际的图像工作,因为我有占位符三维对象包括调试 我用于GUI窗口基础的脚本: 我认为我的问题在于OnTrackableStateChanged()(第19-32行链接;

我正在使用Unity和Vuforia为我的桌面RPG小组制作一个秘密项目。现在,我遇到了一个问题:Vuforia网站上缺少参考资料,删除了网页

目前,我的问题是:我想跟踪多达5个目标图像,并且在扫描时,让每个目标图像都创建自己的GUI窗口,以跟踪UI中的图像。我有它的一部分工作,我可以跟踪所有的图像,但一次只有一个窗口出现。我知道实际的图像工作,因为我有占位符三维对象包括调试

我用于GUI窗口基础的脚本:

我认为我的问题在于OnTrackableStateChanged()(第19-32行链接;第28-43行我的代码如下)。我需要改变它,以便它可以考虑到多个目标图像。我可能又错了,因为Vuforia的API站点或论坛上的任何引用都被删除了。有没有人知道我能做些什么来实现我的目标?我目前正在考虑使用getID()函数,然后不知何故,让OnTrackableStateChange()检查更改的ID是否与最初的想法不同。但同样,我可能忽略了一个更简单的解决方案

如果这还不清楚,我可以再详细一点。下面是我使用的代码,它使用了上面链接中的组件。谢谢你的帮助

using UnityEngine;
using System.Collections;

public class ButtonPopup : MonoBehaviour, Vuforia.ITrackableEventHandler
{

    private Vuforia.TrackableBehaviour mTrackableBehaviour;

    private bool mShowGUIWindow = false;
    private TargetScreenCoords coordinateScript;
    public int ID;
    private Rect mWindowRect;
    public string Name;
    public int Health;
    public string Status;
    public bool Villain;


    void Start()
    {
        mTrackableBehaviour = GetComponent<Vuforia.TrackableBehaviour>();
        if (mTrackableBehaviour)
        {
            mTrackableBehaviour.RegisterTrackableEventHandler(this);            
        }
    }

    public void OnTrackableStateChanged(
                                    Vuforia.TrackableBehaviour.Status previousStatus,
                                    Vuforia.TrackableBehaviour.Status newStatus)
    {

        if (newStatus == Vuforia.TrackableBehaviour.Status.DETECTED ||
            newStatus == Vuforia.TrackableBehaviour.Status.TRACKED)
        {
            mShowGUIWindow = true;
        }
        else
        {
            mShowGUIWindow = false;

        }
    }

    void OnGUI()
    {
        coordinateScript = GetComponent<TargetScreenCoords>();
        mWindowRect = new Rect(coordinateScript.screenPoint.x, Mathf.Abs(coordinateScript.screenPoint.y), 120, 100);

        if (Villain == true)
        {
            GUI.backgroundColor = Color.red;
        }
        if (Villain == false)
        {
            GUI.backgroundColor = Color.green;
        }
        if (mShowGUIWindow)
        {
            mWindowRect = GUI.Window(ID, mWindowRect, DoMyWindow, "ID:" + ID);
        }
    }

    void DoMyWindow(int windowID)
    {
        GUI.Label(new Rect(10, 20, 100, 60), new GUIContent("Name: " + Name + "\nHealth: " + Health + "\nStatus: " + Status));
        if (GUI.Button(new Rect(10, 70, 100, 20), "Edit Button"))
        {
            print("Got a click");
            Villain = !Villain;
        }

    }
}
使用UnityEngine;
使用系统集合;
公共类ButtonPoup:MonoBehavior,Vuforia.ITrackableEventHandler
{
私人Vuforia.trackablebehavior mttrackablebehavior;
私有bool mShowGUIWindow=false;
私有目标屏幕坐标;
公共int ID;
私人直视手术;
公共字符串名称;
公共卫生;
公共字符串状态;
公共场所的恶棍;
void Start()
{
mtrackablebhavior=GetComponent();
if(MTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(
Vuforia.trackablebehavior.Status-previousStatus,
Vuforia.trackablebehavior.Status新闻状态)
{
if(newStatus==Vuforia.trackablebehavior.Status.DETECTED||
newStatus==Vuforia.trackablebehavior.Status.TRACKED)
{
mShowGUIWindow=true;
}
其他的
{
mShowGUIWindow=false;
}
}
void OnGUI()
{
coordinateScript=GetComponent();
mWindowRect=new Rect(coordinateScript.screenPoint.x,Mathf.Abs(coordinateScript.screenPoint.y),120100);
如果(反派==真)
{
GUI.backgroundColor=Color.red;
}
if(反派==假)
{
GUI.backgroundColor=Color.green;
}
如果(mshowgui窗口)
{
mWindowRect=GUI.Window(ID,mWindowRect,DoMyWindow,ID:+ID);
}
}
void DoMyWindow(int windowID)
{
标签(新的Rect(10,20,100,60),新的GUI内容(“名称:“+Name+”\n高度:“+Health+”\n状态:“+Status”);
if(GUI.按钮(新的Rect(10,70,100,20),“编辑按钮”))
{
打印(“点击”);
恶棍=!恶棍;
}
}
}

再次感谢您的帮助/想法。

第一个问题是,您是否希望同时跟踪这5个目标?如果是,请记住您需要在
ARCamera
配置中指定它。将场景中ARCamer对象下的最大同步跟踪图像设置为5


在每个ImageTarget下,还应该有一个可跟踪的事件处理程序脚本。默认情况下,它是
DefaultTrackableEventHandler
。在这个脚本中,您有两个私有方法
OnTrackingFound()
ontrackingloss()
。尝试添加第三个foreach循环,您将在其中启用/禁用GUI对象类型(
Canvas
或类似内容)

您是否尝试过使用MultiTarget Prefact而不是ImageTargets?MultiTarget专门查找方向。因此,如果两个图像在一起,它会做一件事,或者如果它们相距如此之远,则会做另一件事。我不想在我的项目中出现这种情况。我已经实施了你建议的第一部分。我很快会在这里添加编辑过的DefaultTrackableEventHandler。谢谢你的帮助,所以我找到了解决办法。我需要将GUI.Window更改为GUI.Box。它现在跟踪所有我需要的东西,没有问题。很高兴听到这个。