总的来说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中获取游戏对象等,在实际项目中应灵活应对。

Unity学习疑问记录之脚本生命周期的更多相关文章

  1. Unity学习疑问记录之Awake和Update

    Awake() 当一个脚本实例被载入时Awake被调用. Awake用于在游戏开始之前初始化变量或游戏状态.在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与 ...

  2. Unity学习疑问记录之新GUI

    学习Unity 4.6新GUI系统 http://segmentfault.com/a/1190000000642686

  3. Unity学习疑问记录之协程

    http://blog.csdn.net/huang9012/article/details/38492937 总结:1.协程相当于多线程但不是,(尽管它们看上去是这样的),它们运行在同一线程中,跟普 ...

  4. Unity学习疑问记录之保卫伦敦塔学习体会

    1.生成的prefab如果要产生反向: Instantiate(Rocket, rocketPosition.position, Quaternion.Euler(new Vector3(0,0,18 ...

  5. Unity学习疑问记录之查找

    unity中提供了获取对象的五种方法: 通过对象名称(Find方法) 通过标签获取单个游戏对象(FindWithTag方法) 通过标签获取多个游戏对象(FindGameObjectsWithTags方 ...

  6. Unity学习疑问记录之触屏

    当将Unity游戏运行到ios或android设备上时,桌面系统中的鼠标左键操作可以自动变为手机屏幕上的触屏操作,但鼠标操作无法实现一些特有的触屏操作,比如多点触屏. 触控对于Android移动设备来 ...

  7. Unity学习疑问记录之layer问题

    在Sprite Render中有个Sorting Layer,这里可以建层,而Inspector窗口中也有个layer,也可以新建层,这2者有什么不一样呢? layer主要通过光线投射来选择性地忽略碰 ...

  8. Unity学习疑问记录之Apply Root Motion

    Should we control the character's position from the animation itself or from script. 如果我们勾选了Animator ...

  9. Unity学习疑问记录之正交与透视

    Unity中相机的投影是2种方式,正交和透视 这是透视方式 正交方式: //计算屏幕宽度 float height = 2.0f * Camera.main.orthographicSize;//正交 ...

随机推荐

  1. jvm七种垃圾收集器

    JVM_七种垃圾收集器介绍   本文中的垃圾收集器研究背景为:HotSpot+JDK7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老 ...

  2. HFS远程命令执行漏洞入侵抓鸡黑阔服务器

    先来科普一下: HFS是什么? hfs网络文件服务器 2.3是专为个人用户所设计的HTTP档案系统,如果您觉得架设FTP Server太麻烦,那么这个软件可以提供您更方便的网络文件传输系统,下载后无须 ...

  3. ASM,C数据类型

    汇编: db  单字节 = 8bit dw 单字    = 16bit dd  双字   = 32bit C数据类型: char                字节 8bit unsigned cha ...

  4. 使用http.sys,让delphi 的多层服务飞起来

    核心提示:一直以来,delphi 的网络通讯层都是以indy 为主,虽然indy 的功能非常多,涉及到网络服务的各个方面,但是对于大多数多层服务来说,就是需要一个快速.稳定.高效的传输层.Delphi ...

  5. Java设计模式之行为型模式

    行为型模式共11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 策略模式:策略模式的决定权在用户,系统本身提供不同 ...

  6. 图片切换小demo

    <body> <div class="body"><img src="bopin/images/bigImg1.jpg" widt ...

  7. 数据库SQL语句练习题

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  8. 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】

    试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...

  9. C# 如何用多个字符串来切分字符串并去除空格

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  10. 如何用C#+WinRAR 实现压缩 分类:

    前提:必须安装 WinRAR 1. 工具类 using System; using System.Diagnostics; using System.IO; using Microsoft.Win32 ...