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

标签: android 编程 标准
1526人阅读 评论(1) 收藏 举报
分类:

本文为博主原创文章,欢迎转载。请保留博主链接: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的mono没有点出来功能

装一下  vs  for  unity
  • qq_39388570
  • qq_39388570
  • 2017-10-11 16:53:01
  • 63

在unity向量空间内绘制几何(2):球面---重构《黑客帝国》的‘上帝机器’,Deus Ex Machina

今天进一步研究一下如何获取一个球面的三维坐标。 在电影黑客帝国第三部分矩阵革命的最后部分,有一段NEO独创机器城与机器世界的首领交涉的情节。 这个机器首领的名字叫做Deus Ex Machina,拉丁...
  • liu_if_else
  • liu_if_else
  • 2016-06-01 12:10:56
  • 909

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

为了让我们的组件类用起来更方便,我们将上一节的代码进行重构。
  • AndrewFan
  • AndrewFan
  • 2017-02-17 09:27:05
  • 1526

unity3d 重用,继承,泛型等使用

如果创建新的类时,使用的是在unity editor的project视图中右键,create javascript or c#方式,那么创建的类都是默认继承自MonoBehaviour, 生成后可以查...
  • huang9012
  • huang9012
  • 2014-08-11 14:22:00
  • 6116

unity3d中使用状态机

使用状态机的目的就是对角色复杂的行为逻辑代码进行解耦。在同一个act根据状态id不同,调用不同的类执行代码。 以一个士兵,有查找敌人、移动、攻击、胜利、自身死亡,这五种状态为例。 FMS_...
  • jwxkk
  • jwxkk
  • 2016-07-28 14:35:53
  • 1981

Unity3D自学笔记——MonoBehavior常用函数

MonoBehavior常用函数
  • alistair_chow
  • alistair_chow
  • 2016-10-01 01:24:54
  • 903

Unity 脚本基类 MonoBehaviour 与 GameObject 的关系

MonoBehaviour 是 Unity 中所有脚本的基类,如果你使用JS的话,脚本会自动继承MonoBehaviour。如果使用C#的话,你需要显式继承MonoBehaviour。...
  • hihozoo
  • hihozoo
  • 2017-03-27 12:55:57
  • 2792

【Unity】MonoBehavior事件函数的执行顺序(监听调用顺序)

当你在Unity中创建了一个继承于MonoBehavior的类,那么他就遵循下图中所描述的生命流程。从中可以看到各种监听调用的时机。 关于其中各个监听的Coding时的用法请参阅http://doc...
  • u011643833
  • u011643833
  • 2015-11-05 16:07:32
  • 1112

Unity3D自学笔记——MonoBehavior响应事件

OnEnable:物体被启用时调用 OnDisable:物体被禁用时调用,游戏结束 OnDestroy:物体被销毁时调用public class DisableDestroy : MonoBeha...
  • alistair_chow
  • alistair_chow
  • 2016-09-28 12:10:35
  • 1862
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 10万+
    积分: 1443
    排名: 3万+
    关于Andrew
    Unity游戏开发程序员,
    开源游戏引擎Cyclone2D作者,
    我最近在开发一款3D赛车游戏
    热爱图形学、物理学、架构等研究,
    有兴趣的同学加群:528266922。
    博客专栏
    最新评论