For a particular script/type, it seems that OnEnable is called in completely random order. If you make a new project, new scene, then ... OnEnable will *probably* be called in tree order: top-level parent first, then children, then grandchildren, etc. (I used this to base some logic off - fixes/workarounds to bugs in OnEnable/OnDisable/.activeSelf/.activeInHierarchy) OnDisable is invoked in the opposite order: children first, parent last. <-- this makes sense! In a complex scene, I just found that Unity randomized the order of OnEnable calls. Children were called, then the parent. ARGH. This explains some nasty bugs I've found it very hard to track down. So ... is there an official reason for Unity's ordering of OnEnable? If so, is there a way to change / set it? Or ... is this a bug in some versions of Unity (!)? Certianly: it's hard to use OnEnable effectively when you have no info about when it'll be called (in particular: without a guaranteed call-order there's no way to detect if the current object was enabled, or its parent/grandparent/etc).