Vuforiaを使ってARコンテンツを作っている時、
・マーカー認識した時のアクション
・トラッキングが外れた時のアクション
を設定したい時がよくある。
基本的な機能のようだが、意外と上記の設定を行える機能がデフォルトで存在しない(2018/7)ようなので、設定できるように自作した。
準備
※以下の作業は最新のVuforia7系ではすでに対応されているので、
Vuforia 7系を使用する場合は以下の対応は必要ありません
Vuforiaで存在する既存のDefaultTrackableEventHandler.csを継承して作りたい。
そのため、該当する関数をオーバーライドできるように少し修正を行う。
・マーカー認識した時の処理は OnTrackingFound()
・トラッキングが外れた時の処理は OnTrackingLost()
が該当するため、それぞれアクセス修飾子をprotected virtualにする。
protected virtual void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
...
}
protected virtual void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
...
}
スクリプト
スクリプトはほぼ下記の通り。
using UnityEngine;
using UnityEngine.Events;
using Vuforia;
public class CustomDefaultTrackableEventHandler : DefaultTrackableEventHandler {
public UnityEvent OnTrackingAction;
public UnityEvent OffTrackingAction;
protected override void OnTrackingFound ()
{
base.OnTrackingFound ();
OnTrackingAction.Invoke ();
}
protected override void OnTrackingLost()
{
base.OnTrackingLost ();
OffTrackingAction.Invoke ();
}
}
スクリプトはこちらをアップしているので、こちらを使用していただいて構いません。
https://gist.github.com/kiyossy/f2e42b5a13f0bd789a93336253e16757
設定の仕方
それぞれのTargetオブジェクトにアタッチされている
DefaultTrackableEventHandler.cs をRemove Component して、
上記で作成したCustomDefaultTrackableEventHandler.csをアタッチする。
Unity Actionで設定できるようにしているので、UGUIのEventアクションと同じように設定できる。
