美文网首页
[Unity引擎]MonoBehavior的运行原理以及各个函数

[Unity引擎]MonoBehavior的运行原理以及各个函数

作者: 想变的很强的日向彻 | 来源:发表于2019-10-21 14:42 被阅读0次

    1.Mono的机制

    Unity启动时候会调用所有继承自MonoBehavior的类的相关函数,比如Awake,Start,然后每帧会调用Update,那么怎么组织这个调用关系,难道Unity是将所有继承自Mono的类通过反射获取到相关函数,然后统一调用,但是这样效率如何,内存开销大不大,假如是在全局的函数中将所有的继承自Mono的Start等类似的方法存起来统一调用,每帧驱动的时候调用Update

    Type t = mono.GetType();

            MethodInfo mf = t.GetMethod("Start", BindingFlags.Instance | BindingFlags.NonPublic);

            mf.Invoke(mono, null);

    2.通过反射调用函数的私有方法

    usingSystem;

    usingSystem.Reflection;

    //======================

    publicobjectCallNonPublicMethod(objectinstance, stringmethodName, object[] param)

            {

                Type type = instance.GetType();

                MethodInfo method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);

                objectresult;

                try

                {

                    result = method.Invoke(instance, param);

                }

                catch(TargetInvocationException ex)

                {

                    throwex.InnerException;

                }

                returnresult;

            }

    3.Mono机制中函数的调用顺序和生命周期

    Awake:绑定的gameobject不被隐藏就会调用,MonoTest脚本是否被设置为false并不影响其执行

    OnEnable:脚本被激活时调用,在Start之前被调用

    Start::绑定的gameobject和MonoTest都不能被设置为false,在Update的前一帧被调用

    Update:每帧执行,受帧率波动的影响,每帧的执行 时间不固定,以维持一秒钟的总执行时间和帧数不变

    LateUpdate:每帧的最后执行,也就是在这一帧要做的最后的工作放在这个函数中

    FixedUpdate:每帧之间的执行间隔固定

    OnGUI:渲染事件,每帧执行多次

    函数运行周期图

    ->Awake,Enable,Start等用来初始化的函数

    ->物理系统如碰撞等(可能一阵内执行多次)

    ->Input等键鼠输入

    ->yield协程

    ->动画Animation

    ->场景渲染各种Render函数(可以看到渲染在一帧的位置实际是比较靠后的)

    ->OnDrawGizmos,OnGUI等编辑器和UI的渲染函数

    ->一帧结束后,OnDisabel, OnDestroy

    相关文章

      网友评论

          本文标题:[Unity引擎]MonoBehavior的运行原理以及各个函数

          本文链接:https://www.haomeiwen.com/subject/rlovmctx.html