Unity3D脚本的生命周期

一、生命周期

脚本的生命周期就是一个脚本的执行过程,在U3D中是指定的方法,就像cocos2d中的OnEnter和OnExit方法一样,是一个脚本的生命过程。他的过程就是下面这个图。

空白.png

其中Start方法之后的那三个函数可以看成是平行调用的。

二、生命周期函数和测试代码

using UnityEngine;
using System.Collections;

public class zhouqi : MonoBehaviour {

	// Use this for initialization
	void Awake(){
		Debug.Log("Awake");
	}
	
	void OnEnable(){
		Debug.Log("OnEnable");
	}
	
	void Start () {
		Debug.Log("Start");
	}
	
	// Update is called once per frame
	void Update () {
		Debug.Log("Update");
	}
	
	void LateUpdate(){
		Debug.Log("LateUpdate");
	}
	
	void OnDisable(){
		Debug.Log("OnDisable");
	}
	
	void OnDestroy(){
		Debug.Log("OnDestroy");
	}
	
	void OnGUI(){
		Debug.Log("OnGUI");
	}
	
	void FixedUpdate(){
		Debug.Log("FixedUpdate");
	}
}

三、周期函数的使用说明

1、调用的过程顺序

屏幕快照 2016-06-09 21.53.29.png

当脚本开启的时候,会依次调用这几个函数,其中Awake和OnEnable,Start会在脚本开始的时候调用一次,而Update则是每一帧都在调用,LateUpdate是紧接着Update调用,OnGUI调用的更加频繁,主要是用GUI的时候渲染使用,FixedUpdate则是固定频率调用。

特殊情况:当脚本刚开始状态就是未引入的情况(脚本前面没有打勾),这个时候加载完成之后只会调用Awake这一个方法。

OnDisable是在取消引入脚本的时候调用,比如下面这个图,取消引用时会调用OnDisable,当引用的时候,就是脚本前面打勾的时候,就会调用OnEnable。

屏幕快照 2016-06-09 21.53.52.png

OnDestroy则是在脚本销毁的时候调用,比如脚本从project中移除或者绑定的project被销毁的时候,这时候会被调用。

屏幕快照 2016-06-09 21.54.04.png

2.脚本周期的一般使用

Awake是在脚本加载的时候调用的,当脚本并未使用的时候,只会调用Awake这一个方法,Start则是在这个脚本引入之后,会调用一次Start方法,所以一般脚本的Public的变量会在Awake方法中初始化,避免出现脚本未使用的时候,其他脚本引入该脚本的Public的变量的时候没有初始化的情况。而一般私有化的变量在Start方法中初始化。

OnEnable则是该脚本可使用的情况下调用,可用来重置数据。

OnGUI是在实用GUI的东西的时候,比如GUI.Button这些的时候,在这个函数里面渲染。

Update,LateUpdate和FixedUpdate都可以更新数据,但是是不一样的,下面说下区别。

3.Update,LateUpdate和FixedUpdate的区别

Update和LateUpdate只是调用顺序的前后,其他调用没有区别,主要就是Update和FixedUpdate的区别。

Update是动画的每一帧都调用,一般默认是一秒60帧,但是会因为机器显卡性能的高低和机器性能的高低有变化,比如说同一个游戏,好的机器一秒刷新40帧,垃圾机器一秒刷新10帧,所以垃圾机器就会感觉到游戏画面卡,所以垃圾机器的Update的调用就会降低。

而FixedUpdate则是固定频率的调用,说一秒调用10次,就是一秒调用10次。

所以一般情况下,画面逻辑的判断如果是每帧调用的话,比如移动什么的就在Update里面调用,而物理碰撞等判断就最好在FixedUpdate里面判断。不同之处看下面例子

例子:

比如说射击类游戏,当玩家点击射击的时候,机器卡了,帧数降低,而对方则在正常移动,当你机器恢复了,已经过了几秒,这个时候对方在你的界面上就是所谓的瞬移,如果射击是在Update里面判断的,对方已经瞬移了,你这时候判断的肯定是没有打中,但是如果在FixedUpdate里面判断的话,虽然你画面因为帧数降低变卡了,但是判断是固定频率不变的,等界面恢复了,其实还是算打中的。这就是两者的区别。

Last modification:January 1st, 1970 at 08:00 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment