Search Unity

Question iOS/Unity : the Prefab don't disappear on Image tracking.

Discussion in 'AR' started by Spooky92, Apr 26, 2023.

  1. Spooky92

    Spooky92

    Joined:
    May 8, 2022
    Posts:
    9
    Hello everybody,
    I'm on Unity 2022.2.12, AR Foundation and ARKit version 5.0. The app works fine on my Iphone, the prefabs appear (so the images are detected and tracked). But they never disappear, even if in my script I tried do set the Prefab Inactive through the status check. Does anyone have an idea ? Does the Iphone subsystem work as intented ? Thank you.
    Code (CSharp):
    1. public class PlaceTrackedEntities : MonoBehaviour
    2. {
    3.     ARTrackedImageManager _trackedImageManager;
    4.     public GameObject[] arPrefabs;
    5.     private Dictionary<string, GameObject> _instantiatedPrefabs = new Dictionary<string, GameObject>();
    6.  
    7.  
    8.     private void Awake()
    9.     {
    10.         _trackedImageManager = GetComponent<ARTrackedImageManager>();
    11.     }
    12.  
    13.     private void OnEnable()
    14.     {
    15.        
    16.         _trackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;
    17.     }
    18.  
    19.     private void OnDisable()
    20.     {
    21.        
    22.         _trackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
    23.     }
    24.  
    25.     // ------
    26.     // Event Handler
    27.     //------
    28.  
    29.     private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs args)
    30.     {
    31.        
    32.  
    33.         foreach (ARTrackedImage trackedImage in args.added)
    34.         {
    35.             ImageAdded(trackedImage);
    36.         }
    37.  
    38.         foreach (ARTrackedImage trackedImage in args.updated)
    39.         {
    40.             ImageUpdated(trackedImage);
    41.         }
    42.  
    43.  
    44.         foreach (ARTrackedImage trackedImage in args.removed)
    45.         {
    46.             ImageRemoved(trackedImage);
    47.         }
    48.  
    49.     }
    50.  
    51.     private void ImageAdded(ARTrackedImage trackedImage)
    52.  
    53.     {
    54.         Debug.Log("new tracked image");
    55.         var imageName = trackedImage.referenceImage.name;
    56.  
    57.         foreach (var curPrefab in arPrefabs)
    58.         {
    59.             if (string.Compare(curPrefab.name, imageName, System.StringComparison.OrdinalIgnoreCase) == 0 && !_instantiatedPrefabs.ContainsKey(imageName))
    60.             {
    61.                 Debug.Log("Prefab  will spawn");
    62.                 var newPrefab = Instantiate(curPrefab, trackedImage.transform);
    63.  
    64.                 _instantiatedPrefabs[imageName] = newPrefab;
    65.             }
    66.            
    67. if (_instantiatedPrefabs.ContainsKey(imageName))
    68.             {
    69.                 Debug.Log("Prefab  was  already spawned");
    70.             }
    71.  
    72.         }
    73.  
    74.     }
    75.  
    76.     private void ImageRemoved(ARTrackedImage trackedImage)
    77.     {
    78.  
    79.        
    80.         Destroy(_instantiatedPrefabs[trackedImage.referenceImage.name]);
    81.         Debug.Log("The prefab was destroyed");
    82.  
    83.    
    84.         _instantiatedPrefabs.Remove(trackedImage.referenceImage.name);
    85.         Debug.Log("The prefab was removed from the dictionnary");
    86.  
    87.  
    88.     }
    89.  
    90.     private void ImageUpdated(ARTrackedImage trackedImage)
    91.  
    92.     {
    93.         if (trackedImage.trackingState == TrackingState.None)
    94.         {
    95.             Debug.Log("The prefab was desactivated");
    96.             _instantiatedPrefabs[trackedImage.referenceImage.name].SetActive(false);
    97.         }
    98.      
    99.      
    100.     }
    101.    
    102. }
     
  2. andyb-unity

    andyb-unity

    Unity Technologies

    Joined:
    Feb 10, 2022
    Posts:
    1,062
  3. zonikveloz

    zonikveloz

    Joined:
    Oct 9, 2023
    Posts:
    1
  4. makaka-org

    makaka-org

    Joined:
    Dec 1, 2013
    Posts:
    1,023
    My Example is based on AR Foundation 4.2.7:
    Code (CSharp):
    1. private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs args)
    2. {
    3.     foreach (ARTrackedImage arTrackedImage in args.added)
    4.     {
    5.         DebugPrinter.Print("arTrackedImage added: " + arTrackedImage.name);
    6.  
    7.         ShowContent(arTrackedImage.gameObject, true);
    8.     }
    9.  
    10.     foreach (ARTrackedImage arTrackedImage in args.updated)
    11.     {
    12.         if (arTrackedImage.trackingState == TrackingState.Tracking)
    13.         {
    14.             ShowContent(arTrackedImage.gameObject, true);
    15.         }
    16.         else
    17.         {
    18.             ShowContent(arTrackedImage.gameObject, false);
    19.         }
    20.     }
    21.  
    22.     foreach (ARTrackedImage arTrackedImage in args.removed)
    23.     {
    24.         DebugPrinter.Print(
    25.             "arTrackedImage removed: " + arTrackedImage.name);
    26.  
    27.         ShowContent(arTrackedImage.gameObject, false);
    28.     }
    29. }
    30.  
    31. private void ShowContent(GameObject gameObj, bool isShowing)
    32. {
    33.     // Your Actions
    34. }
    Don't Destroy your objects! It's a bad practice in terms of performance and so on.
    Instead of that disable the MeshRenderers and use CanvasGroup.alpha for UI to hide the objects.

    So such approach I implemented in my AR Video Player — Unity Asset.

    ---------------
     
  5. mrtecnologiaadc

    mrtecnologiaadc

    Joined:
    Sep 18, 2023
    Posts:
    2
    What im trying to acomplish is to have múltiples prefabs for múltiple images . But when I do the first track of the prefabs when I go back to the first color to re spawn, nothing happens.
     
  6. WyattBUnity

    WyattBUnity

    Unity Technologies

    Joined:
    Mar 27, 2023
    Posts:
    46