美文网首页
Unity3D开发常用API之脚本生命周期(十)

Unity3D开发常用API之脚本生命周期(十)

作者: TonyWan_AR | 来源:发表于2016-12-16 20:45 被阅读171次

    本节要点

    1.脚本生命周期简介
    
    脚本作为我们游戏的“灵魂”,往往不单独存在,而是经常作为组件的形式挂载
    
    到特定的游戏物体身上,比如:游戏主角,敌人,Boss,子弹,建筑物......
    
    脚本的生命周期,也就是所挂载到的游戏物体的生命周期。
    
    脚本的生命周期,就是挂载到的游戏物体“从出生到死亡”,所经历的一些事件。
    
    这些生命周期事件,是一些特定的方法,且是由 Unity 引擎事先定义好的,在
    
    游戏的运行过程中,由引擎自动调用。
    
    这些生命周期事件,全部定义的 MonoBehaviour 这个类中。也就意味着只有
    
    继承自这个类的脚本,才有这些生命周期事件。
    
    
    
    2.常用生命周期事件
    
    通过一个小的 Demo 演示,来讲解生命周期事件:
    
    按下键盘上的某个键,然后在场景中实例化一个 Cube 物体,
    
    这个 Cube 物体身上挂载一个脚本,用于测试它的生命周期事件。
    
    
    
    
    
    
    
    1.Awake() ※
    
    唤醒事件,只执行一次。
    
    
    
    
    2.OnEnable()
    
    启用事件,只执行一次。当脚本组件被启用的时候执行一次。
    
    
    
    
    3.Start() ※
    
    开始事件,只执行一次。
    
    
    
    
    4.FixedUpdate() ※
    
    固定更新事件,执行 N 次,0.02 秒执行一次。
    
    所有物理组件相关的更新都在这个事件中处理。
    
    
    
    
    5.Update() ※
    
    更新事件,执行 N 次,每帧执行一次。
    
    
    
    6.LateUpdate()
    
    稍后更新事件,执行 N 次,在 Update 事件执行完毕后再执行。
    
    
    
    
    7.OnGUI()
    
    GUI 渲染事件,执行 N 次,执行的次数是 Update 事件的两倍。
    
    
    
    
    8.OnDisable()
    
    禁用事件,执行一次。在 OnDestroy 事件前执行。
    
    或者当该脚本组件被“禁用”后,也会触发该事件。
    
    
    
    
    9.OnDestroy() ※
    
    销毁事件,执行一次。当脚本所挂载的游戏物体被销毁时执行。
    
    
    
    
    10.注意事项
    
    生命周期事件,全部是由系统定义好的,且系统会自动调用。
    
    系统调用这些事件的顺序,和我们代码里面的书写顺序无关。
    
    
    
    
    3.替换代码编辑器
    
    将 Unity 自带的 MonoDevelop 替换成微软的 VS 2013 编辑器。
    
    操作步骤:
    
    Edit-->Preferences...-->Unity Preferences 面板--> External Tools-->External Script Editor 位置进行下拉选择设置。
    
    
    

    关键代码

    LifeTest

    public class LifeTest : MonoBehaviour {
    
        //声明一个公开的属性存放预置体
        public GameObject prefabCube;
    
        //声明一个向量去接收实例化后的游戏对象
    
        private GameObject myCube;
        
        void Start () {
        
            //实例化cube
            //GameObject.Instantiate(prefabCube,Vector3.zero,Quaternion.identity);
        }
        
        
        void Update () {
            
            //按下空格键之后生成一个cube
            if (Input.GetKeyDown(KeyCode.Space))
            {
                //myCube = GameObject.Instantiate(prefabCube, Vector3.zero, Quaternion.identity); //会报错,gameobject != object  所以把object强转成gameobject
    
                myCube = GameObject.Instantiate(prefabCube,Vector3.zero,Quaternion.identity) as GameObject;
            }
    
        //按下A键销毁物体;
    
            if (Input.GetKeyDown(KeyCode.A))
            {
                GameObject.Destroy(myCube);
            }
    
        }
    }
    

    CubeLife

    public class CubeLife : MonoBehaviour {
    
        //所有生命周期的函数返回值都是void
    
        //唤醒事件,只执行一次;
        void Awake() {
    
            Debug.Log("Awake");
        
        }
    
        //启用事件,只执行一次,当脚本组件被启用的时候执行一次;
        void OnEnable() {
            Debug.Log("Enable");
        }
    
    
        //开始事件,只执行一次;
        void Start() {
    
            Debug.Log("Start");
        }
    
        //固定更新事件 执行N次  更新速度比UpDate速度快 所有物理组件的更新都在这个固定更新事件中执行 记住:所有物理组件更新(着重注意) 
        void FixedUpdate() {
            Debug.Log("FixedUpDate");
        
        }
    
        //更新事件,每帧执行一次;
        void Update() {
            Debug.Log("UpDate");
        
        }
    
        //延迟更新事件 也是执行N次 比Update多一次 也就是N+1次 不信你试试咯
        void LateUpdate() {
    
            Debug.Log("LateUpdate");
        }
    
        //onGUI渲染事件 执行次数是Update的两倍
        void OnGUI() {
    
            Debug.Log("OnGUI");
        }
    
    
        //禁用事件 执行一次 在物体被禁用时触发该事件或者在OnDestroy事件前执行
        void OnDisable() {
            Debug.Log("OnDisable");
        }
    
    
        //销毁事件 执行一次 在物体销毁时执行
        void OnDestroy() {
            Debug.Log("OnDeStroy");
        
        }
    }
    

    小结

    Unity脚本生命周期.jpg Unity API.png

    相关文章

      网友评论

          本文标题:Unity3D开发常用API之脚本生命周期(十)

          本文链接:https://www.haomeiwen.com/subject/kzznmttx.html