Unity中AR图像追踪无法识别图片问题求助
ARFoundation+ARKit图像追踪失效问题求助
我正在使用Unity 2020.3结合ARKit与ARFoundation开发一款图像追踪应用,需求是在不同二维码上生成立方体。最初按官方教程操作,但图像追踪功能完全无法正常工作——没有立方体生成,仿佛Reference Library和图像追踪完全识别不了我的图片。
以下是我最初使用教程图片和二维码测试的脚本:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class TrackingManager : MonoBehaviour { ARTrackedImageManager imageManager; [SerializeField] GameObject spawnablePrefab; GameObject spawnedObject; // Start is called before the first frame update void Start() { imageManager = GetComponent<ARTrackedImageManager>(); } // Update is called once per frame void Update() { if(imageManager == null) { Debug.Log("Could not find the image manager."); } } void OnEnable() => imageManager.trackedImagesChanged += OnChanged; void OnDisable() => imageManager.trackedImagesChanged -= OnChanged; void OnChanged(ARTrackedImagesChangedEventArgs eventArgs) { foreach (ARTrackedImage newImage in eventArgs.added) { if(newImage.referenceImage.name == "arMarker1") // && trackedImage.trackingState == TrackingState.Tracking) { Debug.Log("Found Marker 1!"); if (spawnedObject == null) { SpawnPrefab(newImage.transform.position, newImage.transform.rotation); } spawnedObject.transform.position = newImage.transform.position; spawnedObject.transform.rotation = newImage.transform.rotation; } } foreach (ARTrackedImage updatedImage in eventArgs.updated) { if (updatedImage.referenceImage.name.Equals("arMarker1") && updatedImage.trackingState == TrackingState.Tracking) { if(spawnedObject != null) { spawnedObject.transform.SetPositionAndRotation(updatedImage.transform.position, updatedImage.transform.rotation); } } } foreach (ARTrackedImage removedImage in eventArgs.removed) { if (removedImage.referenceImage.name.Equals("arMarker1") && removedImage.trackingState == TrackingState.None) { if (spawnedObject != null) { Destroy(spawnedObject); } } } } private void SpawnPrefab(Vector3 spawnPosition, Quaternion spawnRotation) { spawnedObject = Instantiate(spawnablePrefab, spawnPosition, spawnRotation); } }
此后我尝试了多种不同方案,但问题仍未解决。以下是我当前用于测试二维码的脚本:
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARTrackedImageManager))] public class TrackingManager : MonoBehaviour { List<string> prefabs; ARTrackedImageManager imageManager; //Maps reference images to their associated prefabs. Dictionary<Guid, GameObject> imageToPrefab = new Dictionary<Guid, GameObject>(); //Tracks currently instanciated prefabs. Dictionary<Guid, GameObject> instantiated = new Dictionary<Guid, GameObject>(); // Start is called before the first frame update void Start() { imageManager = GetComponent<ARTrackedImageManager>(); prefabs = new List<string>(); prefabs.Add("orange"); prefabs.Add("green"); prefabs.Add("blue"); SetupPrefabs(); } // Update is called once per frame void Update() { if(imageManager == null) { Debug.Log("Could not find the image manager."); } } void OnEnable() => imageManager.trackedImagesChanged += OnChanged; void OnDisable() => imageManager.trackedImagesChanged -= OnChanged; void OnChanged(ARTrackedImagesChangedEventArgs eventArgs) { foreach (ARTrackedImage newImage in eventArgs.added) { if(imageToPrefab.TryGetValue(newImage.referenceImage.guid, out var prefab)) { instantiated[newImage.referenceImage.guid] = Instantiate(prefab, newImage.transform); } } foreach (ARTrackedImage updatedImage in eventArgs.updated) { if(imageToPrefab.ContainsKey(updatedImage.referenceImage.guid)) { instantiated[updatedImage.referenceImage.guid].transform.position = updatedImage.transform.position; instantiated[updatedImage.referenceImage.guid].transform.rotation = updatedImage.transform.rotation; } } } private void SetupPrefabs() { for(int i=0; i<imageLib.count; i++) { imageToPrefab.Add(imageLib[i].guid, (GameObject)Resources.Load("/Prefabs/" + prefabs[i] + "Cube")); } } }
我现在完全不知道该尝试什么方法了,希望能得到帮助!
(编辑于5/5:最初发布了错误代码)
内容的提问来源于stack exchange,提问作者Haley C
相关产品推荐
相关产品推荐

