リンク内容
こちらのサイトを参考にunityでimage trackingのサンプルを作成しました。
サイトのようにunityのロゴとラフレシアをカメラで写した際にオブジェクトが表示されるようになったのですが、スマホの画面からARマーカーが映らなくなってもオブジェクトが消えません。
他の方の記事を見る限り消えているようなのですが…
スクリプトでARマーカーを認識できなくなったらオブジェクトを消えるようにしたいのですが、どのようにしたらよいのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
開発環境は
・Unity2020.3.11f1
・Xcode12.5
・iPhoneSE(OS14.6)
・ARFoundation 4.2.0-pre.9
となっております。
【シーンのキャプチャ】
【追記したコード】
他は最初の質問文に載せたいただいた参考サイトの通りに進めたため特に変えた箇所などはございません。
その後、
・・・・・・・
※「TrackedImageInfoManager」とうスクリプトにも "OnTrackedImagesChanged"メソッドがあるので、間違えて別のスクリプトに追記してたら呼ばれない可能性もあります。
・・・・・・・
と書いていただいていたので、もしかして
「TrackedImageInfoManager」スクリプトはログが通っているから、こっちの「OnTrackedImagesChanged」メソッドに書けばいけるんじゃ…?と思い書いてみたコードが下記です。
これで一応かなり無理矢理ではありますが非表示にすることができましたが、なぜsetactive(false)で非表示にならないのかが疑問です…
長くなってしまい申し訳ありません。お返事お待ちしております。
投稿2021/06/28 12:45
編集2021/07/12 02:28総合スコア20
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
※少し試した程度なので、他にもっと良い方法があったら申し訳ありません。
↓こちらの情報をヒントに、対象スクリプトに処理を追加することでオブジェクトの表示・非表示ができそうです。
How to Hide Instantiated object in Image Tracking? #544
試した環境
・Unity2020.2.6f1
・Xcode12.5.1
・iPhoneXS(OS14.6)
スクリプト修正手順
1、「ImageTrackingWithMultiplePrefabs」シーンファイルを開く
2、「AR Session Origin」オブジェクトにアタッチされている、「PrefabImagePairManager」スクリプトを開く
3、「PrefabImagePairManager」スクリプト内の、「OnTrackedImagesChanged」メソッドに以下処理を追加する
※具体的にどの様な処理を追加したかは、コメントで追記しております。
C#
1void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs) 2{ 3 foreach (var trackedImage in eventArgs.added) 4 { 5 // Give the initial image a reasonable default scale 6 var minLocalScalar = Mathf.Min(trackedImage.size.x, trackedImage.size.y) / 2; 7 trackedImage.transform.localScale = new Vector3(minLocalScalar, minLocalScalar, minLocalScalar); 8 AssignPrefab(trackedImage); 9 } 10 11 12 // ADD START ========== 13 // 説明: 14 // トラッキング状態に更新があった場合、ステータスを見て処理を分岐し、 15 // ・ステータスが、"None"または"Limited" の場合はオブジェクトを非表示 16 // ・ステータスが、上記以外の場合はオブジェクトを表示 17 // としています。 18 // 「m_Instantiated」という変数にインスタンス化されたオブジェクトが入っている様だったので、こちらのオブジェクトに対して表示・非表示を設定しています。 19 foreach (var trackedImage in eventArgs.updated) 20 { 21 if (trackedImage.trackingState == TrackingState.None || trackedImage.trackingState == TrackingState.Limited) { 22 if (m_Instantiated != null) 23 { 24 m_Instantiated[trackedImage.referenceImage.guid].gameObject.SetActive(false); 25 } 26 } else { 27 if (m_Instantiated != null) { 28 m_Instantiated[trackedImage.referenceImage.guid].gameObject.SetActive(true); 29 } 30 } 31 } 32 // ADD END ========== 33}
06.25追記
以下、サンプルシーンの設定キャプチャになります。
ソースを落として来た段階では、キャプチャの様な設定になっているかと思います。
投稿2021/06/26 11:04
編集2021/06/28 10:20総合スコア1751
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/27 08:21
2021/06/28 03:20
2021/06/28 03:58 編集
2021/06/28 12:47 編集
2021/06/28 09:52
2021/06/28 10:17
2021/06/28 12:54 編集
2021/06/28 13:17
2021/06/28 22:56
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。