美文网首页
[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