はじめに
ARKit 1.5で追加されたImageAnchor。
画像を認識してその座標を取得できる便利なもの(※詳しくはこちらの記事を参照ください)なのですが、
僕の環境のUnityARKitPluginのサンプルではどうもうまく動きませんでした。(2018.10.22現在)
Deployment Targetを12.0に設定したら動いた!!
フォーラムでそう言ってた(小並感)
https://forum.unity.com/threads/arkit-2-0-beta-support.534639/#post-3522275
要するにこういうことらしい。
ARWorldTrackingConfigurationで画像認識を使うと固まる問題
https://qiita.com/k-boy/items/7ce8263392dfa7acaca4
XCodeのバージョンが上がるまで我慢するしかないね😢
ImageAnchorの実装方法
1. ARReferenceImageを作成
2. パラメータを設定して・・・
Physical Sizeは1で1メートルなので0.1(10cm)を設定。
3. ARReferenceImagesを作成
4. 認識したい数だけReferenceImageを設定しましょう
5. Unity AR Camera ManagerにReferenceImagesを設定
6. Sampleのスクリプトから「Generate Image Anchor」を設定
※ 僕の環境だと、認識精度が低く、すぐにオブジェクトが消滅してしまうので以下のようにコードを変更しました
void UpdateImageAnchor(ARImageAnchor arImageAnchor)
{
Debug.LogFormat("image anchor updated[{0}] : tracked => {1}", arImageAnchor.identifier, arImageAnchor.isTracked);
if (arImageAnchor.referenceImageName == referenceImage.imageName) {
if (arImageAnchor.isTracked)
{
if (!imageAnchorGO.activeSelf)
{
imageAnchorGO.SetActive(true);
}
imageAnchorGO.transform.position = UnityARMatrixOps.GetPosition(arImageAnchor.transform);
imageAnchorGO.transform.rotation = UnityARMatrixOps.GetRotation(arImageAnchor.transform);
}
else if (imageAnchorGO.activeSelf)
{
// imageAnchorGO.SetActive(false); // <= コメントアウト
}
}
}
void RemoveImageAnchor(ARImageAnchor arImageAnchor)
{
Debug.LogFormat("image anchor removed[{0}] : tracked => {1}", arImageAnchor.identifier, arImageAnchor.isTracked);
if (imageAnchorGO) {
// GameObject.Destroy (imageAnchorGO); // <= コメントアウト
}
}
楽しいARライフを!
Twitterフォローしてね!!
https://twitter.com/mutun__