GameObject is null after disable/enable ImageTrackerManager

Hi all.

After tracking a new image I am using this code:
foreach (var trackedImage in eventArgs.added)
{
_gameObjectInstantiated = Instantiate(start_prefab, trackedImage.transform);
}

I have one button to inactivate the _gameObjectInstantiated:
public void hideGameObject()
{
_gameObjectInstantiated.SetActive(false);
}
And other button the disable/enable the ImageTrackerManager:
if (m_TrackedImageManager.enabled == true)
{
m_TrackedImageManager.enabled = false;
}else{
m_TrackedImageManager.enabled = true;
}

If I tracker an image and instantiate the _gameObjectInstantiated I have my model in scene. If I disable the manager and enable again my _gameObjectInstantiated keeps working anchored in the image.
But if after I disabled the manager I set my _gameObjectInstantiated as _gameObjectInstantiated.SetActive(false); and enabling the manager again my _gameObjectInstantiated now is null.

But I havent destroyed anything.

I tryied to keep empty in foreach (var trackedImage in eventArgs.removed) to not destroy anything, to not do anything but not working.

What am I missing?

Thank you.

 void UpdateInfo(ARTrackedImagesChangedEventArgs eventArgs)
    {
        try
        {
            foreach (var trackedImage in eventArgs.added)
            {
                _debug.text += "added";
                _gameObjectInstantiated = Instantiate(start_prefab, trackedImage.transform);
            }
        } catch (Exception ex)
        {
            _debug.text += "UpdateInfo " + ex.Message;
        }
    }

    public void disableImageTracker()
    {
        try
        {
            if (m_TrackedImageManager.enabled == true)
            {
                m_TrackedImageManager.enabled = false;
                //_gameObjectInstantiated.AddComponent<ARAnchor>();
                disableTracker_btn.GetComponentInChildren<TMP_Text>().text = "enable\ntracker";
            }
            else
            {
                if (_gameObjectInstantiated != null)
                {
                    if (_gameObjectInstantiated.GetComponent<ARAnchor>() != null)
                    {
                        //Destroy(_gameObjectInstantiated.GetComponent<ARAnchor>());                  
                    }
                }
                if (_gameObjectInstantiated != null)
                {
                    _debug.text += "!null ";
                }
                else
                {
                    _debug.text += "=null ";
                }
                   
                m_TrackedImageManager.enabled = true;
                disableTracker_btn.GetComponentInChildren<TMP_Text>().text = "disable\ntracker";
            }
        }
        catch (Exception ex)
        {
            _debug.text += "disableImageTracker " + ex.Message;
        }
    }



    public void hideGameObject()
    {
        _gameObjectInstantiated.SetActive(false);
    }

I suspect your Destroy on Removal property is set to true on these tracked images: Class ARTrackable<TSessionRelativeData, TTrackable> | AR Foundation | 5.0.7

If you don’t want these GameObjects to be destroyed when the underlying AR Trackable is Removed, you should set this to false.

1 Like