Both events are not affected by script execution order.
Scene is traversed from each root separately in unspecified (non-hierarchy) order, e.g. [root 1 and all its children], [root 2 and all its children]. “root” being a top-level GameObject in scene.
All OnDisable calls are performed before all OnDestroy calls within a single root.
Only root GameObject activeSelf
is changed, for children it will not be changed.
Components are traversed in the order they appear in Inspector, top to bottom.
OnDisable:
OnDestroy:
Call order: same as hierarchy, parent before child.
(Above Tested with 2017.4 and an opened Scene running in play mode in editor by stopping the play mode, may differ for other versions/situations)