Unity脚本的生命周期

Unity脚本的生命周期

前言:Unity中定义了10个重要的事件函数,按照执行的先后顺序依次为以下的内容:

(1):Reset:重置函数,编辑期当脚本赋值给游戏对象时触发,仅执行一次。

(2):Awake:唤醒函数,最先执行的事件函数,用于优先级最高的事件处理,仅执行一次。

(3):OnEnable:启用函数,当脚本启动的时候触发,随着脚本的不断启用与禁用可以执行多次。

(4):Start:开始函数,一般用于给脚本字段赋初值使用,仅执行一次。

(5):FixedUpdate:固定更新函数,以默认0.02s的时钟频率执行,常用于物体学模拟中处理刚体的移动等,每秒执行多次。

(6):Update:更新函数,执行的频率不固定,与计算机当前的性能消耗乘反比,常用于逻辑计算,每秒执行多次。

(7):LateUpdate:后更新函数,在其余两个更新函数之后执行,常用于摄像机的控制情形中,每秒执行多次。

(8):OnGUI:图形绘制函数:绘制系统UI界面,每秒执行多次。

(9):OnDisable:脚本禁用函数,当脚本禁用的时候触发,随着脚本的不断启用和禁用,可以多次的执行。

(10):OnDestroy:销毁函数,本脚本所属游戏对象销毁的时候执行本脚本。仅执行一次。

1.写下来我们编写脚本来测试一下各个函数的生命周期:

public class Demo10_ScriptLifeCycle : MonoBehaviour
{

    void Reset()
    {
        print("重置函数Reset");
    }

    void Awake()
    {
        print("唤醒事件函数Awake");
    }

    void OnEnable()
    {
        print("脚本启用事件函数OnEnable");
    }

    void Start()
    {
        print("开始函数Start");
        //开启调用函数
        InvokeRepeating("InvokeTest", 0f, 1f);
        //开始协成
        StartCoroutine("CoroutineTest");
    }

    void FixedUpdate()
    {
        print("固定更新函数FixedUpdate");
    }

    void Update()
    {
        print("更新函数Update");
        //停止调用函数
        if (Input.GetKey(KeyCode.I))
        {
            CancelInvoke("InvokeTest");
        }
        //停止协成
        else if (Input.GetKey(KeyCode.C))
        {
            StopCoroutine("CoroutineTest");
        }
    }

    void LateUpdate()
    {
        print("延迟更新函数LateUpdate");
    }

    void OnGUI()
    {
        print("界面绘制函数OnGUI");
    }

    void OnDisable()
    {
        print("脚本禁用函数OnDisable");
    }

    void OnDestroy()
    {
        print("销毁函数OnDestory");
    }

    void InvokeTest()
    {
        print("被测试的调用函数的方法");
    }

    IEnumerator CoroutineTest()
    {
        while (true)
        {
            yield return new WaitForSeconds(1f);
            print("被测试的协成");
        }
    }

}//class_end

当我们把脚本赋值给层级视图的一个空对象的时候,注意我们Console视图中会出现一个信息:

以上的输出的结果是Unity生命周期中的Reset()函数在编辑期间就触发的(当我们给空对象赋值我们的脚本的时候触发的)。好的,接下来执行我们的程序:

运行的结果我们可以看到脚本中的部分事件函数的执行的顺序与执行的次数。但是我们发现没有OnDisable和OnDestroy事件函数的输出。我们开始禁用这个脚本:

当我们禁用完脚本后会发现“被测试的调用函数的方法”和“被测试的协成”依然还是会执行:

当我们启用脚本的时候会执行OnEnable()事件函数:

我们用结构图表示各个函数的执行的顺序:

时间: 2024-11-06 09:40:48

Unity脚本的生命周期的相关文章

[Unity-10] Unity脚本的生命周期

做过Android开发的朋友应该都知道,Android每一个Activity都有一套完整的生命周期,Unity的脚本也有着类似的生命周期,下面就一起来看一下. 1.Awake():脚本唤醒.这个方法是脚本生成时执行的第一个方法,用来初始化脚本.脚本的整个生命周期中只执行一次. 2.Start():脚本开始.这个方法是在Awake()之后执行,也只执行一次. 3.Update():脚本更新.这个方法在Start()之后执行,每一帧都会执行一次,帧率越高执行的越频繁. 4.LateUpdate():

Unity学习笔记(2) --- Unity脚本的生命周期

相关文档:Execution Order of Event Functions 1.function Update () {} 正常更新,用于更新逻辑.此方法每帧都会由系统自动调用一次. 2.function LateUpdate () {} 推迟更新,此方法在Update() 方法执行完后调用,同样每一帧都调用. 3.function Awake () {} 脚本唤醒,此方法为系统执行的第一个方法,用于脚本的初始化,在脚本的生命周期中只执行一次. 4.function FixedUpdate

一张图彻底了解Unity脚本的生命周期

以前没好好看Unity的脚本手册,原来写的是这么的全...尤其起yield  www  协同 这部分看了这张图彻底的懂了..

Unity 脚本函数生命周期

Awake(),一般我们在这里做一些组件的获得,比如使用getcomponent方法. Start(),我们可以在这里给变量赋值. FixUpdate(),固定更新,因为这里得更新速度为固定(可以在Time中设置),我们一般在这里存放物理的方法,比如rigibody,移动控制,鼠标的按下事件等等.好处是:运动会显得比较平滑. Update(),每一帧调用,这里可以放一些自定义的方法. LateUpdate(),每一帧调用,Update()完成后调用,一般用于摄像机的跟随(防止相机先于角色到达,而

把脚本的生命周期用虚拟方法可以重写调用

/* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ########## #### #### ########### #### #### ########### ##### ##### ### ######## ##### ##### ### ######## ###### ###### ### ########### ###### ###### #### ###

Unity3D脚本(MonoBehaviour)生命周期分析

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 场景中有2个物体:A,B 每个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script : B , Message : OnEnable Object : A , Script : A

Unity3D实践系列04, 脚本的生命周期

Unity3D脚本生命周期是指从脚本的最初唤醒到脚本最终销毁的整个过程.生命周期的各个方法被封装到了MonoBehaviour类中.具体来说如下: 1.In Editor Mode 编辑模式 当在编辑器中把脚本绑定到某个GameObject的时候,调用了MonoBehaviour类的Reset方法. 2.Startup 开始运行阶段 如果脚本所绑定的GameObject是存在的,MonoBehaviour类的的Awake方法首先被调用. 随之执行MonoBehaviour类的OnEnable方法

Unity3D脚本(MonoBehaviour)生命周期

场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script : B , Message : OnEnable Object : A , Script : A , Message : Awake Object : A , Script : A , Message : OnEnable Object : B , Script : B , Message : Aw

小抄:选择 Unity 的对象生命周期管理员

Unity 框架提供了数种生命周期管理员,各有相同和相异之处.刚开始接触时,难免头昏. 制作这张小抄,只是为了要帮助自己理解和记忆.如果你也用 Untiy,或可参考看看. 文字說明: TransientLifetimeManager:每次解析时一律建立新的对象,且 Unity 容器不会保存该对象的参考(即容器不负责释放该对象).此控制模式一般称为 Transient. ContainerControlledLifetimeManager:每次解析时都固定返回同一个既有对象,并且在容器本身摧毁时一