U3D开发学习之路--脚本生命周期以及常用类

脚本的生命周期是非常重要的概念:Unity脚本从唤醒到销毁的过程。如下图:



初始阶段:
Awake():经验不多,我认为一般在工具类当中一般把初始的变量都写进该调用函数中。
Start():游戏初始化的时候使用。
物理阶段:
FixedUpdate(),OnCollisionXXX,OnTriggerXXX
输入事件:
OnMouseEnter(),--Over,--Exit,--Down,--Up
游戏逻辑:
Update(),LateUpdate()跟随中调用
场景渲染:
OnBecameVisible(),OnBecameInvisible()
结束阶段:
OnDisable(),OnDestroy(),OnApplicationQuit()
类的关系示意图如下:

查找组件的常用方法:GetComponent GetComponentInChidren GetComponentInParent等等
我们可以通过递归算法来写一个查找组件类:
public static Transform GetChild(Transform parentTF, string childName)
    {
        //在子物体中根据名称查找
        Transform childTF = parentTF.Find(childName);
        if (childTF != null) return childTF;

        int count = parentTF.childCount;
        for (int i = 0; i < count; i++)
        {//将问题转移给子物体
            childTF = GetChild(parentTF.GetChild(i), childName);
            if (childTF != null)
                return childTF;
		}
        return null;
    }




Unity3D 中,生命周期是指游戏对象(GameObject)及其附加的脚本(MonoBehaviour)从创建到销毁过程中经历的一系列事件和方法调用。理解这些生命周期方法有助于开发者更好地组织逻辑、优化性能以及避免潜在的问题。 ### MonoBehaviour 生命周期 Unity 的 MonoBehaviour 类提供了多个回调函数,用于处理不同阶段的生命周期事件。以下是一些常见的生命周期方法: - **Awake**:在脚本实例被加载时调用[^2]。此方法通常用于初始化变量或设置引用。 - **OnEnable**:当 GameObject 被激活时调用。可以在这里订阅事件或者重新启用某些功能。 - **Start**:在第一帧更新之前调用一次[^1]。适合用来做初始化操作,比如启动协程。 - **Update**:每帧调用一次。这是主要的游戏逻辑所在的地方。 - **FixedUpdate**:按照固定的时间间隔调用,适用于物理相关的计算。 - **LateUpdate**:在所有 Update 方法执行完毕后调用。常用于摄像机跟随等需要滞后于其他更新的操作。 - **OnDisable**:当 GameObject 被禁用时调用。可以在这里取消订阅事件或者暂停某些功能。 - **OnDestroy**:当 GameObject 或其组件被销毁时调用[^2]。适合进行资源清理工作。 下面是一个简单的示例代码,展示了如何使用这些生命周期方法: ```csharp using UnityEngine; public class LifecycleExample : MonoBehaviour { void Awake() { Debug.Log("Awake: GameObject is loaded."); } void OnEnable() { Debug.Log("OnEnable: GameObject is enabled."); } void Start() { Debug.Log("Start: Initialization complete."); } void Update() { // Game logic here. Debug.Log("Update: Frame update."); } void FixedUpdate() { // Physics-related logic here. Debug.Log("FixedUpdate: Physics update."); } void LateUpdate() { // Logic that needs to run after all Updates. Debug.Log("LateUpdate: Post-update logic."); } void OnDisable() { Debug.Log("OnDisable: GameObject is disabled."); } void OnDestroy() { Debug.Log("OnDestroy: GameObject is being destroyed."); } } ``` ### GameObject 生命周期 除了 MonoBehaviour 提供的生命周期外,GameObject 本身也有自己的生命周期。它包括创建、激活/非激活状态的变化以及最终的销毁。通过 `SetActive(true/false)` 可以控制 GameObject 的激活状态,而通过 `Object.Destroy()` 则可以销毁 GameObject 或其组件。 此外,还有一些特殊的场景管理相关的方法需要注意,例如: - **DontDestroyOnLoad**:防止 GameObject 在加载新场景时被自动销毁,这对于保持音乐播放器或全局管理器非常有用。 - **SceneManager.sceneLoaded**:监听场景加载完成事件,以便进行必要的初始化或数据加载。 正确理解和利用这些生命周期方法可以帮助开发者构建更加健壮和高效的游戏应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值