2017-02-16 24 views
0

Я использую 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; 
     } 

    } 
} 

Еще раз спасибо за помощь/идеи.

+0

Вы пытались использовать сборку MultiTarget вместо ImageTargets? –

+0

MultiTarget специально ищет ориентацию. Поэтому, если 2 изображения вместе, они делают что-то или, если они так далеко друг от друга, делают другое дело. Я не хочу этого (пока) в моем проекте. – Travis

ответ

0

Первый вопрос: если вы хотите отслеживать эти 5 целей одновременно? Если да, помните, что вам нужно указать его в конфигурации ARCamera. Установите Max Simultaneous Tracked Images на 5 под объектом ARCamer в сцене.

Под каждым ImageTarget вы также должны иметь сценарий обработчика отслеживаемого события. По умолчанию это DefaultTrackableEventHandler. В этом скрипте у вас есть 2 частных метода OnTrackingFound() и OnTrackingLost(). Попробуйте добавить туда 3-й цикл foreach, где вы включите/отключите свой тип объекта GUI (Canvas или что-то в этом роде).

+0

У меня есть первая часть вашего предложения. Я добавляю отредактированный DefaultTrackableEventHandler здесь в ближайшее время. Спасибо за помощь. – Travis

+0

Итак, я нашел решение. Мне нужно было изменить GUI.Window на GUI.Box. Теперь он отслеживает все, что мне нужно, без проблем. – Travis

+0

Приятно слышать это. –