本人用的脚本编辑器是vs2015中文版,如果没有vs的小伙伴请戳下面的下载链接,里面还有详细说明。
vs2015中文旗舰版下载
我们会发现,脚本里,自带两个函数:
void Start(){
}
void Update(){
}
Start()方法在Update被调用前进行调用,只调用一次。(所以Start()方法无论写在上面还是下面都在Update之前执行)Update方法每帧都要执行一次
我们先看一下脚本的流程图,然后再进行逐个讲解及汇总。
Reset:在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。
Reset最常用于在检视面板中给定一个默认值。
Awake(一次):Awake在所有对象被初始化之后调用,用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内Awake仅被调用一次。Awake不能用来执行协同程序。
每个游戏物体上的Awake以随机的顺序被调用。所以在一般时候,用Awake来设置脚本间的引用,然后用Start来传递信息。
OnEnable:在Awake之后调用。控制脚本中组件的启动与禁用。
例如:this.enable=false,则会直接跳转到OnDisable方法执行一次,其它的任何方法,将不再被执行。
Start(一次):Start函数总是在Awake函数之后调用。Start在生命周期中只被调用一次。
Start和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码,协调初始化顺序。
FixedUpdate(每帧):固定帧(固定的时间间隔,不受帧率(FPS)影响)更新,更新频率默认为0.02s。
FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。
Update(每帧):正常帧更新,每一帧都执行,用于更新逻辑。
Update比较适合做控制。如果卡帧了Update就不会再执行,而FixedUpdate则继续执行。
LateUpdate(每帧):在所有Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用执行。
LateUpdate可用于调整脚本执行顺序。例如:相机跟随就可以用这个函数,即人物移动在Update中实现,相机跟随在LateUpdate()中实现,播放后的效果是:角色移动发生在前,相机移动紧跟其后。(如果相机也在Update里执行,就可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。)
OnGUI(每帧)在渲染和处理GUI事件时调用。每帧都执行。
在界面显示一个button或label时常常用到它。
OnDisable:脚本被卸载时,OnDisable将被调用(脚本不会被销毁)。OnDisable不能用于协同程序。
常用于一些用于清理的事件。
OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy只会在预先已经被激活的游戏物体上被调用。OnDestroy也不能用于协同程序。
函数执行顺序:
**Awake→OnEable→ Start → FixedUpdate→Update →LateUpdate →OnGUI →Reset → OnDisable →OnDestroy **
最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,如果在这个地方将当前脚本禁用:this.enable=false,则会直接执行OnDisable方法,其它的任何方法,都将不再被执行。
如果当前脚本处于可用状态:this.enable =true,则按正常的执行顺序是继续向下执行OnEnable。
再向下执行,会进行一个判断,如果Start方法还没有被执行,则会被执行一次,如果已经被执行了,则不会再被执行。这是个什么意思呢?我们可以在某个脚本中将组件禁用this.enable=false,再启用时会转到OnEnable处执行,这时继续向下走,发现Start执行过了,将不再被执行。比如说:第一次启用时,将怪物的初始位置定在了(0,0,0)点,然后怪物可能会发生了位置的变换,后来被禁用了,再次启用时,不会让怪物又回到初始的(0,0,0)位置。
继续向后执行,就是FixedUpdate了,然后是Update,再然后是LateUpdate,如果后面写了Reset,则会又回到Update,在这4个事件间可以进行循环流动。
再向后执行,就进入了渲染模块(Rendering),非常重要的一个方法就是OnGUI,用于绘制图形界面,每帧都执行。
再向后,就是卸载模块(TearDown),当被禁用(enable=false)时,会执行OnDisable方法,但是这个时候,脚本并不会被销毁,在这个状态下,可以重新回到OnEnable状态(enable=true)。
当手动销毁或附属的游戏对象被销毁时,OnDestroy才会被执行,当前脚本的生命周期结束。
有了生命周期,物体才能动起来。我们以后要用这些方法做游戏了,理解并牢记这些方法吧。