Untiy中的Awake和Start的区别和使用

Untiy中的Awake和Start的区别和使用

最近又碰到了这个问题,特此来做一下回忆和记录。切记网上搜索的东西,一定要自己去尝试验证,很多文章内容都是胡乱转载,根本没有加以认真的核对就发布。以下我都进行了测试和资料查找,最后有附带的测试工程,可以自行实验。

Unity圣典解释

下面再来看看Unity圣典中的解释。

Awake()
当一个脚本实例被载入时Awake被调用。也可以理解为物体被激活的时候,物体被激活时,会自动加载自身所带的脚本,
不论脚本有没有处于勾选状态。
也就是说只有激活的物体才会执行脚本的Awake。注意这里是激活的物体,不是指脚本。

理解为物体激活时调用。

Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。每个游戏物体上的Awke以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用。它不能用来执行协同程序。

Start()

Start仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。

理解为脚本被勾选的时候调用。

你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。

规律总结

条件情况 Awake Start
物体未激活 X X
物体激活,脚本未激活 V X
物体激活,脚本也激活 V V

请记住这两个函数只会执行一次,不论你反复多次勾选或者取消脚本的禁用状态

多个物体的Awake执行顺序

多个物体脚本的Awake脚本顺序执行时随机的,并且Start也会保持这个顺序,如果需要手动的更改脚本的执行顺序,
需要去自行设置。
整体上来说,还是必须保持先Awake后Start的执行顺序。
Unity 脚本的初始化顺序与调整办法
https://jingyan.baidu.com/article/0a52e3f4d47152bf62ed7297.html

其他注意事项

除此之外,还有对Awake函数和Start函数都比较重要的一点,那就是当游戏对象之间存在父子关系时(不论层级的多少)。这时,父游戏对象的状态(开启或关闭)完全决定了子游戏对象上的脚本函数的执行情况。总的来说就是,只有在父游戏对象被开启的状态下,程序才会考虑是否调用子游戏对象上的脚本函数(Awake与Start等)。自上而下,以此类推。

请注意,如果在Awake或者Start中有出现异常情况,会直接报错,停止运行。

实验工程测试

链接: https://pan.baidu.com/s/1Nk-IG5Ahkx55YBytw-Ikug 密码: y5aq

猜你喜欢

转载自blog.csdn.net/wwlcsdn000/article/details/80068216
今日推荐