【Unity编程】 MonoBehavior 组件父类重构
2017-02-17 09:27
369 查看
本文为博主原创文章,欢迎转载。请保留博主链接:http://blog.csdn.net/andrewfan
3.2MonoBehavior 组件父类重构
为了让我们的组件类用起来更方便,我们将上一节的代码进行重构。改写成如下:using UnityEngine; using System.Collections; namespace Assets.AndrewBox.Comp { /// /// 初始化状态 /// public enum InitState { NothingInited, FirstInited, SecondInited } public abstract class BaseBehavior : AbstractBehavior { /// /// 当前的初始化状态 /// protected InitState m_initState = InitState.NothingInited; //变换对象 public Transform m_transform; /// /// 在此完成第一阶段的初始化 /// protected override sealed void Awake() { m_transform = transform; DoInit(InitState.FirstInited); } /// /// 在此完成第二阶段的初始化 /// protected override sealed void Start() { DoInit(InitState.SecondInited); } /// /// 执行更新 /// protected override sealed void Update() { if (m_initState != InitState.SecondInited) { return; } OnUpdate(); } /// /// 用于首次初始化,完成外部需访问的公共成员的初始化 /// protected abstract void OnInitFirst(); /// /// 用于二次初始化,完成内部私有成员的初始化 /// protected abstract void OnInitSecond(); /// /// 执行更新 /// protected abstract void OnUpdate(); /// /// 用于外部主动调用初始化 /// /// 初始化的目标状态 public void DoInit(InitState targetState=InitState.SecondInited) { if (m_initState == InitState.NothingInited&& m_initState接下来,原先的TestComponent类将变成如下形式:
using UnityEngine; using System.Collections; using Assets.AndrewBox.Util; using Assets.AndrewBox.Comp; public class TestComponenets : BaseBehavior { protected override void OnInitFirst() { Debuger.LogAtFrame("OnInitFirst"); } protected override void OnInitSecond() { Debuger.LogAtFrame("OnInitSecond"); } protected override void OnUpdate() { Debuger.LogAtFrame("OnUpdate"); } protected void OnEnable() { Debuger.LogAtFrame("OnEnable"); } protected void OnDisable() { Debuger.LogAtFrame("OnDisable"); } protected void OnDestroy() { Debuger.LogAtFrame("OnDestroy"); } }
这样的好处是让继承类严格按照格式进行初始化,也可以在组件创建的早期,手动进行立刻完整初始化。
本文为博主原创文章,欢迎转载。请保留博主链接:http://blog.csdn.net/andrewfan
相关文章推荐
- 【Unity编程】 MonoBehavior 组件父类重构
- 【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生
- 【Unity】MonoBehavior事件函数的执行顺序(监听调用顺序)
- 面向组件编程之Unity 11.Quaternion.LookRotation 转自lijing_hi
- 【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生
- 面向组件编程之Unity 8.按键控制 关键字:bool,GetKey,KeyCode
- unity MonoBehavior 函数执行顺序和生命周期
- Unity+Behavior Tree行为树 Behavior Designer 行为树组件(三)
- Unity 通过代码获取从面板传入的mono脚本,并添加为GameObject的脚本组件
- 面向组件编程之Unity 9.计时器 关键字:Time,Time.deltatime
- 面向组件编程之Unity 4.怎样得到游戏场景中的对象 例如:layer/tag&&SetActive隐藏游戏物体
- [Mark Unity]MonoBehavior里面基本函数调用
- [Unity&接口]子类即继承接口类也继承MonoBehaviour的快速操作和重构实现
- 面向组件编程之Unity 1.怎样获取脚本所在物体的各种组件,例如:transform/BoxCollider
- 面向组件编程之Unity 11.Quaternion类属性 线性插值Lerp() 关键字:按键控制游戏物体朝向
- 面向组件编程之Unity 6.怎样复制游戏物体 关键字:time/<GameObject>/Instantiate/Debug
- 面向组件编程之Unity 7.怎样脚本控制物体旋转和移动 关键字:画圆&&Translate/transform.Translate,transform.Rotate
- 【Unity编程】 Component 组件脚本及其基本生命周期
- 面向组件编程之Unity 3.怎样获取脚本所在物体的各种组件 例如:GetComponentInChildren<T>()/GetComponentsInChildren<U>()
- 【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生