Unity生命周期

一、生命周期函数
1、 Reset() :组件重设为默认值时(只用于编辑状态)
2、Awake() :脚本组件载入时 (调用一次)
3、OnEnable() :是在游戏对象可以调用时调用
4、Start():第一个Update发生之前 (调用一次)
5、FixedUpdate() :固定时间调用,常用于物理相关的计算,比如对Rigidbody的操作
6、Update():大部分游戏行为代码被执行的地方,除了物理代码
7、LateUpdate() :每帧Update调用之后
8、OnGUI() :绘制GUI时调用
9、OnDisable(): 当对象设置为不可用时
10、OnDestroy():组件销毁时调用

二、生命周期作用
1.Awake:
用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.FindWithTag()这样的函数搜索它们。每个游戏物体上的Awake以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
2.Start:
仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。在所有脚本实例中,Start函数总是在Awake函数之后调用。
3.FixedUpdate:
固定帧更新,在Unity导航菜单栏中,点击“Edit”–>“Project Setting”–>“Time”菜单项后,右侧的Inspector视图将弹出时间管理器,其中“Fixed Timestep”选项用于设置FixedUpdate()的更新频率,更新频率默认为0.02s。
4.Update:
正常帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。
5.LateUpdate:
在所有Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用执行,这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。LateUpdate,在每帧Update执行完毕调用,他是在所有update结束后才调用,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。
6.OnGUI:
在渲染和处理GUI事件时调用。比如:你画一个button或label时常常用到它。这意味着OnGUI也是每帧执行一次。
7.Reset:
在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个默认值。
8.OnDisable:
当物体被销毁时 OnDisable将被调用,并且可用于任意清理代码。脚本被卸载时,OnDisable将被调用,OnEnable在脚本被载入后调用。注意: OnDisable不能用于协同程序。
9.OnDestroy:
当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy只会在预先已经被激活的游戏物体上被调用。注意:OnDestroy也不能用于协同程序。

三、调用顺序
Awake ->OnEable-> Start -> -> FixedUpdate-> Update -> LateUpdate ->OnGUI -> OnDisable ->OnDestroy

### Unity 生命周期详解 #### Awake 方法 Awake 是在脚本实例的生存期内由 Unity 只调用一次的方法。该方法用于替代构造函数进行初始化操作,因为 Unity 中组件的初始化并不依赖于传统的构造函数机制[^1]。 ```csharp void Awake() { // 初始化代码写在这里 } ``` #### OnEnable 方法 每当 GameObject 对象或其上的脚本被激活时都会触发 `OnEnable` 方法。这不仅发生在首次创建对象时,也包括当对象从非活动状态切换至活动状态之时][^[^23]。 ```csharp void OnEnable() { // 当游戏对象变为活跃状态时执行此代码 } ``` #### Start 方法 Start 函数会在第一次更新之前被执行,并且只运行一次。它通常用来完成那些需要等待所有资源都准备好才能做的工作,比如获取其他组件引用等。 ```csharp void Start() { // 这里可以放置一些延迟初始化逻辑 } ``` #### Update 和 FixedUpdate 方法 Update 每帧都被调用,适用于处理每帧都需要做的事情;而 FixedUpdate 则按照固定的时间间隔调用,主要用于物理计算相关的任务。 ```csharp void Update() { // 每帧执行的操作放在此处 } void FixedUpdate() { // 物理引擎相关的工作应该放在这个函数里面 } ``` #### OnDestroy 方法 当一个对象即将被销毁前会自动调用 OnDestroy 。这对于清理不再使用的资源非常有用,例如取消订阅事件监听器或者释放网络连接等等。 ```csharp void OnDestroy() { // 清除工作可在此实现 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值