- Home /
Question by
tabetomoya · Aug 31, 2021 at 02:54 AM ·
unity 5iosandorid
(Unity ARfoundation Imagetracking) KeyNotFoundException: The given key was not present in the dictionary.
I'm trying to display a different prefab for each marker in Image Tracking. https://www.youtube.com/watch?v=I9j3MD7gS5Y
I made it with reference to the above video. But I get a KeyNotFoundException and an error.
Here is the code.↓ ーーーーーーーーーーーーーーーーーーーーーーー
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;
//ここでKeyNotFoundException: The given key was not present in the dictionary.
//「指定されたキーが辞書に存在しませんでした」と表示される
GameObject prefab = spawnedPrefabs[name];
prefab.transform.position = position;
prefab.SetActive(true);
foreach (GameObject go in spawnedPrefabs.Values)
{
if (go.name != name)
{
go.SetActive(false);
}
}
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
Does anyone know any solution?
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220613042404im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How to solve issues between Unity and Xcode? 0 Answers
App will not appear on my iPhone! Help! 0 Answers
Xcode "Make Directory Error" (UNITY ADS) 0 Answers
Leaks on iOS build related to Unity 0 Answers