かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Vuforia で認識中のオブジェクトの位置をトラッキングしたい

Vuforia で簡単に任意のマーカーを認識させることが出来るらしい。

かっこいい! しかも、カメラから見て、どれくらいの位置にあるのか?とかどれくらい傾いてるのか?という情報がとれるらしい。凄い。

開発で試すのには無料っぽいので登録してみましょう。あと、Unity 2017.2 あたりからは Unity に組み込まれてるので使うのも簡単!

Vuforia Developer Portal |

HoloLens でも使える!すごい!

azure-recipe.kc-cloud.jp

さて、実際に認識まではさくっといけるのですがオブジェクトがカメラから見てどの位置にいるのかを取得するときのポイントなどを…

  • ImageTarget のサイズは現実世界にあるマーカーのサイズと一致させる必要があります。これがあってないと、位置があわなかったりします。
  • ARCameraWorld Center ModeCAMERA にします。これで世界の中心はカメラ!ということで ImageTargettransform の各種プロパティから情報が引っこ抜けます。
  • 認識されてる間だけ情報を抜きたかったら、ITrackableEventHandler を以下のような要領で実装したクラスを ImageTarget にアタッチしてあげればいい
public class TrackingHandler : MonoBehaviour, ITrackableEventHandler
{
    private GameObject target;

    private TrackableBehaviour trackableBehaviour;

    private TrackableBehaviour.Status currentStatus;

    private void Start()
    {
        this.trackableBehaviour = this.GetComponent<TrackableBehaviour>();
        this.trackableBehaviour.RegisterTrackableEventHandler(this); // これ大事
    }

    private void Update()
    {
        if (this.currentStatus == TrackableBehaviour.Status.TRACKED)
        {
            // ここでトラッキングできてるときの処理とか
        }
    }

    public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        this.currentStatus = newStatus;
    }
}

なかなか、面白いね!Vuforia!!