Search Unity

Question Prefabs not changed when reference image changed

Discussion in 'AR' started by ProtiumDesign, Jul 8, 2021.

  1. ProtiumDesign

    ProtiumDesign

    Joined:
    Aug 3, 2019
    Posts:
    3
    Hi,

    I setup whole project and that is fine. But I'm sucked now with script.

    I have 26 images in library and 26 prefabs for each of them.
    But I get only one, always. All images trigger first prefab.
    And sometimes nothing happened.

    I attached 5 images of that 26.

    I need help to get this proper to work.
    I just need to each image trigger each prefab.
    Without any UI, without any special options or functions.
    Just to shot proper prefab for proper image.

    Here is script:

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.XR;
    5. using UnityEngine.XR.ARFoundation;
    6.  
    7. [RequireComponent(typeof(ARTrackedImageManager))]
    8. public class ImageTracking : MonoBehaviour
    9. {
    10.     [SerializeField]
    11.     private GameObject[] placeablePrefabs;
    12.     private Dictionary<string, GameObject> spawnedPrefabs = new Dictionary<string, GameObject>();
    13.     private ARTrackedImageManager trackedImageManager;
    14.     private void Awake()
    15.     {
    16.         trackedImageManager = FindObjectOfType<ARTrackedImageManager>();
    17.         foreach (GameObject prefab in placeablePrefabs)
    18.         {
    19.             GameObject newPrefab = Instantiate(prefab, Vector3.zero, Quaternion.identity);
    20.             newPrefab.name = prefab.name;
    21.             spawnedPrefabs.Add(prefab.name, newPrefab);
    22.         }
    23.     }
    24.     private void OnEnable()
    25.     {
    26.         trackedImageManager.trackedImagesChanged += ImageChanged;
    27.     }
    28.     private void OnDisable()
    29.     {
    30.         trackedImageManager.trackedImagesChanged -= ImageChanged;
    31.     }
    32.     private void ImageChanged(ARTrackedImagesChangedEventArgs eventArgs)
    33.     {
    34.         foreach (ARTrackedImage trackedImage in eventArgs.added)
    35.         {
    36.             UpdateImage(trackedImage);
    37.         }
    38.         foreach (ARTrackedImage trackedImage in eventArgs.updated)
    39.         {
    40.             UpdateImage(trackedImage);
    41.         }
    42.         foreach (ARTrackedImage trackedImage in eventArgs.removed)
    43.         {
    44.             spawnedPrefabs[trackedImage.referenceImage.name].SetActive(false);
    45.         }
    46.     }
    47.     private void UpdateImage(ARTrackedImage trackedImage)
    48.     {
    49.         string name = trackedImage.referenceImage.name;
    50.         Vector3 position = trackedImage.transform.position;
    51.         Quaternion rotation = trackedImage.transform.rotation;
    52.  
    53.         GameObject prefab = spawnedPrefabs[name];
    54.         prefab.transform.position = position;
    55.         prefab.transform.rotation = rotation;
    56.         prefab.SetActive(true);
    57.  
    58.         foreach (GameObject go in spawnedPrefabs.Values)
    59.         {
    60.             if (go.name != name)
    61.             {
    62.                 go.SetActive(false);
    63.             }
    64.         }
    65.     }
    66. }
    I need help from you. Please. Thank you.
     

    Attached Files:

    • 01.jpg
      01.jpg
      File size:
      1.5 MB
      Views:
      277
    • 02.jpg
      02.jpg
      File size:
      1.4 MB
      Views:
      277
    • 03.jpg
      03.jpg
      File size:
      1.4 MB
      Views:
      272
    • 04.jpg
      04.jpg
      File size:
      1.5 MB
      Views:
      273
    • 05.jpg
      05.jpg
      File size:
      1.5 MB
      Views:
      272
  2. excitergames

    excitergames

    Joined:
    Jun 23, 2021
    Posts:
    1
    Markers are too similar I think.