zoukankan      html  css  js  c++  java
  • Unity学习疑问记录之脚本生命周期

      

    总的来说unity的脚本生命周期分几个部分:编辑→初始化→游戏逻辑→渲染→GUI→Teardown
    首先是Reset,顾名思义:重置。在什么情况下调用呢?1.用户第一次添加组件时。2用户点击见组件面板上的Reset按钮时。
    接下来的几个比较重要:
    Awake():当脚本实例被载入时调用,一般进行一些初始化赋值。
    Start():Start只在Update第一次被调用前执行一次。
    接下来是三个更新函数(比较重要这里我做了详细讲解):
    Update(),FixedUpdate(),LateUpdate()三者的区别:
    1.Update():每帧执行一次
    2.FixedUpdate():以固定的时间间隔执行,不受帧率影响,默认0.02s,如果卡帧了Update就不会再执行,而FixedUpdate则继续执行。
    时间间隔可以在Edit->ProjectSetting->time->Fixedtimestep中修改。主要用于处理物理逻辑,比如Rigidbody等。
    3.LateUpdate():LateUpdate是在所有Update函数调用后被调用。比如相机跟随就可以用这个函数,即人物移动在Update中实现,相机
    跟随在LateUpdate()中实现,Play后的效果是:角色移动发生在前,相机移动紧跟其后。
    OnGUI 方法:  渲染和处理GUI事件时调用,用于渲染图形界面,同样很重要。

    OnDisable 方法: 当对象变为不可用或非激活状态时此函数被调用。
    OnDestroy 方法:当MonoBehaviour将被销毁时,这个函数被调用。
    以上是单个脚本的生命周期执行顺序,大家知道Unity是不支持多线程的,但是Unity可以同时创建很多脚本,并且可以分别绑定在不同的游戏对
    象上,他们分别执行各自生命周期时又如同多线程并行执行脚本的,那么当有多个脚本时Awake(),Update()等函数执行顺序是如何呢?
    答案是与单个脚本执行顺序一样,什么意思?
    例如:我建立两个脚本:Script1和Script2
    在两个脚本中我都加入Awake()和Update()函数:
    public class Script1 : MonoBehaviour                   public class Script2 : MonoBehaviour 
    {                                                                     {
                 void Awake ()                                                    void Awake () 
                {                                                                       {
                Debug.Log("Script1  Awake");                              Debug.Log("Script2  Awake");
                }                                                                       } 
               void Update ()                                                     void Update ()            
               {                                                                       {                                                                        
               Debug.Log("Script1  Update");                              Debug.Log("Script2  Update");
              }                                                                        }
    }                                                                      }
    我们看下执行结果:        Script1  Awake
                                         Script2  Awake
                                         Script1  Update
                                         Script2  Update
    由此我们得出结论:每个脚本的Awake,Update方法在后台都汇集在一起。
    如上两个脚本在后台:void Awake()
                                    {    
                                         Script1中的Awake();
                                         Script2中的Awake();
                                    }  
    后台中Update函数汇总也是一样,这里就不列出了。
    在实际的项目中脚本会非常多,那么如此多的脚本在后台脚本中的顺序可能不是我们预期那样,此时可以在脚本的Inspector面板下方Execution Order中修改脚本执行顺序,不过这样非常麻烦。建议一般在Awake中做一些初始化,在Start中获取游戏对象等,在实际项目中应灵活应对。

  • 相关阅读:
    CentOs 7.3下ELK日志分析系统搭建
    01 使用Git基本方法
    02 网页换肤
    运行代码
    01 使用JavaScript原生控制div属性
    excel 删除了自动保存的文件,如何恢复
    Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
    eclipse启动错误
    centos已安装gcc 4.8.2,gcc -version 也是4.8.2 但是被其他工具调用时,显示未调用4.8.2
    centos 6.4安装cmake
  • 原文地址:https://www.cnblogs.com/bearhb/p/4736403.html
Copyright © 2011-2022 走看看