C#问题——Unity中 继承MonoBehaviour的类,Awake和构造函数的先后顺序,以及非继承类中构造函数实例化的时间.

声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。


Unity中 继承MonoBehaviour的类,Awake和构造函数的先后顺序,以及非继承类中构造函数实例化的时间.



一.开发环境

unity20XX.X.X
VS20XX


二.问题描述

继承Mono和非继承的.构造函数构造时间.


三.解决方案原理及代码

继承Monobehabiour:

在 Unity 中,MonoBehaviour 的构造函数和 Start() 函数的执行顺序如下:

先执行 MonoBehaviour 的构造函数,此时对象已经被创建但还没有被初始化。
构造函数早于 Awake

Unity 会在场景加载后立即调用 Awake() 函数,这是初始化对象的最佳时机。在 Awake() 函数中,可以进行对象的初始化,例如获取组件、设置默认值等操作。

当所有对象都被唤醒后,Unity 会在第一个 Update() 帧之前调用 Start() 函数。在 Start() 函数中,可以进行需要在 Update() 之前进行的初始化操作。

因此,MonoBehaviour 的构造函数和 Start() 函数的执行顺序是先构造函数,然后是 Awake() 函数,最后是 Start() 函数。

官方说明:

扫描二维码关注公众号,回复: 14682581 查看本文章

Never initialize any values in the constructor. Instead use Awake or
Start for this purpose. Unity automatically invokes the constructor
even when in edit mode. This usually happens directly after
compilation of a script, because the constructor needs to be invoked
in order to retrieve default values of a script. Not only will the
constructor be called at unforeseen times, it might also be called for
prefabs or inactive game objects.
不要在构造函数中初始化任何变量.要用Awake或Start函数来实现.即便是在编辑模式,Unity仍会自动调用构造函数.这通常是在一个脚本编译之后,因为需要调用脚本的构造函数来取回脚本的默认值.我们无法预计何时调用构造函数,它或许会被预置体或未激活的游戏对象所调用.

不要在构造函数中初始化任何变量.继承MonoBehaviour的类初始化变量需要在Awake或Start函数来实现.

未继承Monobehabiour:

实例化创建类的对象时构造,调用构造函数.

四.总结

保持饥饿,保持愚蠢.
这世界唯一能够相信的就是你付出的努力和你走过的路.

猜你喜欢

转载自blog.csdn.net/weixin_45532761/article/details/129848071
今日推荐