かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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!!