Hi all!

I haven’t been able to find much about this. I have a GameObject that stores references to other game objects. Because I don’t want to have to use GameObject.FindWithTag and GetComponent all the time, I instead access these references through properties. The one GameObject that stores the reference has a singleton. So then I can put properties such as:

private GameManager Manager
{
   get { return ReferenceStoringObject.Instance.reference_needed; }
}

And access the references this way. I’m not sure about how good of a design that is, but I feel it beats slow GameObject.FindWithTag and GetComponent calls?

Anyway, the problem is that this reference storing object gets destroyed before some of the other ones, and this results in NullReferenceExceptions.

So… is there a way to ensure this object gets destroyed last, after the rest? Or is there a much better design approach that I’m completely missing (can’t say I’ve been programming for too long)?

Thanks in advance!

Have you considered using a static list instead? You can have a static list as a member in your monobehaviour (which means its contents will be the same for all instances of that behaviour) and use something like:

using System.Collections.Generic;

static List<MyScriptName> myRefList = new List<MyScriptName>();

void OnEnable() {
   myRefList.Add(this);
}

void OnDisable() {
   myRefList.Remove(this);
}


void Update() {
   //so instead of findwithtag, you can do
   foreach (MyScriptName myScriptInstance in myRefList) {
      if (myScriptInstance.gameObject.tag == "Tag") {
         Foo();
      }
   }
}

With this you won’t have to worry about destroy order, because you will have access to myRefList as long as there is at least one instance of your behaviour script.