【Unity编程】 MonoBehavior 组件父类重构

    xiaoxiao2021-03-25  40

    本文为博主原创文章,欢迎转载。请保留博主链接: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

    转载请注明原文地址: https://ju.6miu.com/read-300091.html

    最新回复(0)