2017-02-16 15 views
0

私は、卓上RPGグループの秘密プロジェクトを作るのにUnityとVuforiaを使用しています。今、私はVuforiaのサイトで参照が不足していて、Webページを削除しています。UnityとVuforia:ターゲットのイメージIDとGUI Windows

現在のところ私の問題は次のとおりです。ターゲット画像を5つまで追跡し、スキャンしたときにUIの画像とともに追跡する独自の個別GUIウィンドウを作成することができます。私はそれの一部を働いている、私はすべての画像を追跡することができますが、一度に1つのウィンドウが表示されます。私は、実際のイメージが動作することを知っています。なぜなら、私はプレースホルダー3dオブジェクトをデバッグに含めるからです。

私はGUIのWindows用のベースに使用するスクリプト:https://developer.vuforia.com/forum/faq/unity-how-can-i-popup-gui-button-when-target-detected

私は私の問題は、OnTrackableStateChanged()(ライン19-32リンク;以下28-43私のコード)にあると思います。複数のターゲット画像を考慮に入れるように変更する必要があります。 VuforiaのAPIサイトやフォーラムの参照が削除されてしまったので、再び私はSUPERに間違いがあります。私の目標を達成するために何ができるか考えている人はいますか?私は現在、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; 
     } 

    } 
} 

ヘルプ/アイデアをお寄せいただきありがとうございます。

+0

ImageTargetsの代わりにMultiTargetプレハブを使用してみましたか? –

+0

MultiTargetは具体的に向きを探します。したがって、2つの画像が一緒になっている場合、それはあることをするか、またはそれほど離れている場合は別のことを行います。私は私のプロジェクトで(まだ)それを望んでいません。 – Travis

答えて

0

最初の質問は、これらの5つのターゲットを同時にトラッキングする場合です。はいの場合は、ARCameraの設定で指定する必要があることに注意してください。シーン内のARCamerオブジェクトの下にMax Simultaneous Tracked Imagesを5に設定します。

各ImageTargetには、追跡可能なイベントハンドラスクリプトも必要です。デフォルトではDefaultTrackableEventHandlerです。このスクリプトでは、2つのプライベートメソッドOnTrackingFound()OnTrackingLost()があります。 3番目のforeachループを追加して、GUIオブジェクトタイプ(Canvasなど)を有効または無効にします。

+0

私はあなたの提案の最初の部分を実装しました。 ここで、編集したDefaultTrackableEventHandlerをすぐに追加します。助けてくれてありがとう。 – Travis

+0

私は解決策を見つけました。 GUI.WindowをGUI.Boxに変更する必要がありました。これで、問題なく必要なすべてのものが追跡されます。 – Travis

+0

それを聞いてよかったです。 –

関連する問題