Unity3D学习笔记 - Unity常用原生函数的执行顺序

现阶段对于我来说最常用的是Start(),OnEnable()和OnDisable()。

OnEnable()的优先级高于Start(),每次Enable的时候OnEnable()都会加载,而Start()只会加载一次。

OnDisable()只有在Disable一个Component的时候才会加载。

很容易测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Start()
{
Debug.Log("Start");
}

private void OnEnable()
{
Debug.Log("OnEnable");
}

private void OnDisable()
{
Debug.Log("OnDisable");
}

直接运行后显示:

1548667686456

在GameObject 里面Disable这个Component以后会显示:

1548667787559

1548667803245

再次Enable以后,加上之前的,完整的Console信息是:

1548667860208

Unity官方文档里也有一张详细的图表说明原生函数的顺序:

这里比较有用的一点是Awake()要比OnEnable()执行的优先级靠前,但是Awake()和Start()一样都是只执行一次。

Awake()的优先级最高是因为,它是当一个GameObject Active以后就会立刻执行,而其他的都是在Component Enable以后执行。

强调一下:Active和Enable的区别在于,Active是针对GameObject的,Enable是针对Component的:

1548700183636