Я использую Unity и Vuforia для создания секретного проекта для своей настольной группы RPG. Сейчас я столкнулся с проблемой отсутствия ссылок и удаления веб-страниц на сайте Vuforia.Unity and Vuforia: целевой идентификатор изображения и графический интерфейс Windows
В настоящее время моя проблема заключается в следующем: я хочу отслеживать до 5 целевых изображений и, при проверке, каждый из них должен создать свое собственное окно GUI, которое отслеживает изображение в пользовательском интерфейсе. У меня есть часть работы, я могу отслеживать все изображения, но одновременно появляется только одно окно. Я знаю, что фактические изображения работают, потому что у меня есть трехмерные объекты-заполнители, включенные для отладки.
Сценарий я использовал для основы для графического интерфейса пользователя Windows: https://developer.vuforia.com/forum/faq/unity-how-can-i-popup-gui-button-when-target-detected
Я думаю, что моя проблема заключается в OnTrackableStateChanged() (строки 19-32 ссылку, 28-43 мой код ниже). Мне нужно изменить его, чтобы он мог принимать во внимание несколько целевых изображений. Опять же, я мог быть SUPER неправильным, потому что были удалены ссылки на веб-сайт или форумы Vuforia. Есть ли у кого-нибудь возможная идея о том, что я могу сделать для достижения своей цели? Я сейчас думаю, используя функцию getID(), а затем, как-то, имея OnTrackableStateChange(), проверьте, изменился ли измененный идентификатор, чем исходная идея. Но опять же, я мог бы рассмотреть более простое решение.
Если это непонятно, я могу попытаться разработать немного больше. Ниже приведен код, который я использую, который использует компоненты из приведенной выше ссылки. Спасибо вам за помощь. :
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;
}
}
}
Еще раз спасибо за помощь/идеи.
Вы пытались использовать сборку MultiTarget вместо ImageTargets? –
MultiTarget специально ищет ориентацию. Поэтому, если 2 изображения вместе, они делают что-то или, если они так далеко друг от друга, делают другое дело. Я не хочу этого (пока) в моем проекте. – Travis