前提・実現したいこと
初心者です
unityのARfoundationを使用してマーカーARを実装しようとしています
発生している問題・エラーメッセージ
マーカーを読み込んでオブジェクトが出現したら、それ以降オブジェクトの位置が変わらないようにしたいのですが、マーカーの位置が変わるたびにオブジェクトがそれに追従しようとしてしまいます
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR; using UnityEngine.XR.ARFoundation; [RequireComponent(typeof(ARTrackedImageManager))] public class ImageTracking : MonoBehaviour { [SerializeField] private GameObject[] placeablePrefabs; private Dictionary<string, GameObject> spawnedPrefabs = new Dictionary<string, GameObject>(); private ARTrackedImageManager trackedImageManager; private void Awake() { trackedImageManager = FindObjectOfType<ARTrackedImageManager>(); foreach (GameObject prefab in placeablePrefabs) { GameObject newPrefab = Instantiate(prefab, Vector3.zero, Quaternion.identity); newPrefab.name = prefab.name; newPrefab.SetActive(false); // 追加 spawnedPrefabs.Add(prefab.name, newPrefab); } } private void OnEnable() { trackedImageManager.trackedImagesChanged += ImageChanged; } private void OnDisable() { trackedImageManager.trackedImagesChanged -= ImageChanged; } private void ImageChanged(ARTrackedImagesChangedEventArgs eventArgs) { foreach (ARTrackedImage trackedImage in eventArgs.added) { UpdateImage(trackedImage); } foreach (ARTrackedImage trackedImage in eventArgs.updated) { UpdateImage(trackedImage); } foreach (ARTrackedImage trackedImage in eventArgs.removed) { spawnedPrefabs[trackedImage.name].SetActive(false); } } private void UpdateImage(ARTrackedImage trackedImage) { string name = trackedImage.referenceImage.name; Vector3 position = trackedImage.transform.position; Quaternion rotation = trackedImage.transform.rotation; GameObject prefab = spawnedPrefabs[name]; prefab.transform.position = position; Quaternion rot90 = Quaternion.Euler(90.0f, 0.0f, 0.0f); if (name.Equals("PosterCanvas")) { prefab.transform.rotation = rotation * rot90; } else { prefab.transform.rotation = rotation * rot90; position.y -= 0.06f; prefab.transform.position = position; } prefab.SetActive(true); foreach (GameObject go in spawnedPrefabs.Values) { if (go.name != name) { go.SetActive(false); } } } }
試したこと
後半のprivate void UpdateImageの部分を変えれば良いのかと思ったのですが、どのように変更すれば良いのか検討がつきませんでした。
ご回答よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。