Out of curiosity.... I just made a system by which every object of a class adds itself to a static Arraylist when it gets created, and removes itself in OnDisable. I then iterate through that array to find objects which are within a certain distance of a given point. After writing this code, it occurred to me that GameObject.FindGameObjectsWithTag() might have been simpler and more efficient. My initial thought was that it would be more expensive to (frequently) search through a complex hierarchy than to simply iterate over objects which you already know are relevant. However, it occurred to me that Unity might already put every object of a given tag into a list, so it can return those objects without searching for them. That would obviously make my piece of code redundant. I wonder if OTEE could shed some light on how this kind of thing is implemented in Unity?