zoukankan      html  css  js  c++  java
  • Unity战斗模块之角色继承设计---1.1

    一、游戏对象实体基类

      包含有:

        1.属性

        2.自身继承MonoBehaviour的方法

        3.以及虚方法---初始化、更新、启用禁用、销毁

        4.Cmd 命令相关部分

      1.属性

    /// <summary>
            /// 游戏对象名字
            /// </summary>
            protected string _name;
            public string Name
            {
                set
                {
                    _name = value;
                    gameObject.name = _name;
                }
                get
                {
                    return _name;
                }
            }
    
            /// <summary>
            /// 游戏对象id
            /// </summary>
            public int Id
            {
                protected set;
                get;
            }
    
            /// <summary>
            /// 游戏对象Uid
            /// 服务器上的唯一id
            /// </summary>
            public int Uid
            {
                protected set;
                get;
            }
    
            /// <summary>
            /// 游戏对象实体类型
            /// </summary>
            public EnumEntityType EntityType
            {
                protected set;
                get;
            }

      2.继承MonoBehaviour的方法

     /// <summary>
            /// 一般游戏对象中不再使用该方法
            /// </summary>
            protected void Update()
            {
                UpdateEntity(Time.deltaTime);
            }
    
            /// <summary>
            /// 销毁游戏对象
            /// </summary>
            private void OnDestroy()
            {
                DestroyEntity();
            }

      3.虚方法 --- 初始化、更新、启用、禁用、销毁

     /// <summary>
            /// 实体对象初始化方法
            /// </summary>
            /// <param name="uid">UID</param>
            public virtual void Init(int uid)
            {
                Uid = uid;
                //默认名字为UID
                Name = uid.ToString();
                //子类中重写实体类型
                EntityType = EnumEntityType.None;
            }
    
            /// <summary>
            /// 更新实体对象
            /// </summary>
            /// <param name="deltaTime"></param>
            protected virtual void UpdateEntity(float deltaTime)
            {
    
            }
    
            /// <summary>
            /// 启用游戏对象
            /// </summary>
            /// <param name="pos">对象位置</param>
            public virtual void EnableEntity(Vector3 pos)
            {
                gameObject.transform.position = pos;
            }
    
            /// <summary>
            /// 禁用游戏实体对象
            /// </summary>
            public virtual void DisableEntity()
            {
    
            }        
    
            /// <summary>
            /// 自定义销毁实体对象
            /// </summary>
            public virtual void DestroyEntity()
            {
                
            }

      4.Cmd命令相关部分

    /// <summary>
            /// 接收命令委托
            /// </summary>
            /// <param name="data"></param>
            public delegate void OnReceiveCmd(ICmd data);
    
            /// <summary>
            /// 角色所能处理的命令列表
            /// </summary>
            protected Dictionary<EnumCmdType, OnReceiveCmd> dicCmds = new Dictionary<EnumCmdType, OnReceiveCmd>();
    
            /// <summary>
            /// 添加命令
            /// </summary>
            protected void AddCmd(EnumCmdType cmd, OnReceiveCmd func)
            {
                if (dicCmds.ContainsKey(cmd))
                {
                    DebugManager.Instance.ErrorLog("Error: " + Name + " 重复添加" + cmd + "命令");
                    return;
                }
                dicCmds.Add(cmd, func);
            }
    
            /// <summary>
            /// 移除命令
            /// </summary>
            protected void RemoveCmd(EnumCmdType cmd)
            {
                if (!dicCmds.ContainsKey(cmd))
                {
                    DebugManager.Instance.ErrorLog("Error: " + Name + " 对象不存在此命令 " + cmd);
                    return;
                }
                dicCmds.Remove(cmd);
            }
    
            /// <summary>
            /// 接收命令
            /// </summary>
            public void ReceiveCmd(EnumCmdType cmd, ICmd data)
            {
                if (!dicCmds.ContainsKey(cmd))
                {
                    DebugManager.Instance.ErrorLog("Error: " + Name + " 对象不存在此命令 " + cmd + " 触发命令失败");
                    return;
                }
    
                //触发命令
                dicCmds[cmd].Invoke(data);
            }

      5.关于枚举EnumEntityType 和 EnumCmdType 以及接口 ICmd

    /// <summary>
        /// 游戏对象实体类型
        /// </summary>
        public enum EnumEntityType
        {
            None,
            Boss,
            Player,
        }
    
        /// <summary>
        /// 游戏对象处理的命令类型
        /// </summary>
        public enum EnumCmdType
        {
            None,
        }
    
    /// <summary>
        /// 命令接口
        /// </summary>
        public interface ICmd
        {
        }

      6.完整的代码为:

    /// <summary>
        /// 游戏对象实体基类
        /// </summary>
        public class BaseEntity : MonoBehaviour
        {
            #region 属性
    
            /// <summary>
            /// 游戏对象名字
            /// </summary>
            protected string _name;
            public string Name
            {
                set
                {
                    _name = value;
                    gameObject.name = _name;
                }
                get
                {
                    return _name;
                }
            }
    
            /// <summary>
            /// 游戏对象id
            /// </summary>
            public int Id
            {
                protected set;
                get;
            }
    
            /// <summary>
            /// 游戏对象Uid
            /// 服务器上的唯一id
            /// </summary>
            public int Uid
            {
                protected set;
                get;
            }
    
            /// <summary>
            /// 游戏对象实体类型
            /// </summary>
            public EnumEntityType EntityType
            {
                protected set;
                get;
            }
    
            #endregion
    
            #region MonoBehaviour自身方法
    
            /// <summary>
            /// 一般游戏对象中不再使用该方法
            /// </summary>
            protected void Update()
            {
                UpdateEntity(Time.deltaTime);
            }
    
            /// <summary>
            /// 销毁游戏对象
            /// </summary>
            private void OnDestroy()
            {
                DestroyEntity();
            }
    
            #endregion
    
            #region 虚方法 --- 初始化、更新、启用、禁用、销毁
    
            /// <summary>
            /// 实体对象初始化方法
            /// </summary>
            /// <param name="uid">UID</param>
            public virtual void Init(int uid)
            {
                Uid = uid;
                //默认名字为UID
                Name = uid.ToString();
                //子类中重写实体类型
                EntityType = EnumEntityType.None;
            }
    
            /// <summary>
            /// 更新实体对象
            /// </summary>
            /// <param name="deltaTime"></param>
            protected virtual void UpdateEntity(float deltaTime)
            {
    
            }
    
            /// <summary>
            /// 启用游戏对象
            /// </summary>
            /// <param name="pos">对象位置</param>
            public virtual void EnableEntity(Vector3 pos)
            {
                gameObject.transform.position = pos;
            }
    
            /// <summary>
            /// 禁用游戏实体对象
            /// </summary>
            public virtual void DisableEntity()
            {
    
            }        
    
            /// <summary>
            /// 自定义销毁实体对象
            /// </summary>
            public virtual void DestroyEntity()
            {
                
            }
    
            #endregion
    
            #region Cmd 命令相关部分
    
            /// <summary>
            /// 接收命令委托
            /// </summary>
            /// <param name="data"></param>
            public delegate void OnReceiveCmd(ICmd data);
    
            /// <summary>
            /// 角色所能处理的命令列表
            /// </summary>
            protected Dictionary<EnumCmdType, OnReceiveCmd> dicCmds = new Dictionary<EnumCmdType, OnReceiveCmd>();
    
            /// <summary>
            /// 添加命令
            /// </summary>
            protected void AddCmd(EnumCmdType cmd, OnReceiveCmd func)
            {
                if (dicCmds.ContainsKey(cmd))
                {
                    DebugManager.Instance.ErrorLog("Error: " + Name + " 重复添加" + cmd + "命令");
                    return;
                }
                dicCmds.Add(cmd, func);
            }
    
            /// <summary>
            /// 移除命令
            /// </summary>
            protected void RemoveCmd(EnumCmdType cmd)
            {
                if (!dicCmds.ContainsKey(cmd))
                {
                    DebugManager.Instance.ErrorLog("Error: " + Name + " 对象不存在此命令 " + cmd);
                    return;
                }
                dicCmds.Remove(cmd);
            }
    
            /// <summary>
            /// 接收命令
            /// </summary>
            public void ReceiveCmd(EnumCmdType cmd, ICmd data)
            {
                if (!dicCmds.ContainsKey(cmd))
                {
                    DebugManager.Instance.ErrorLog("Error: " + Name + " 对象不存在此命令 " + cmd + " 触发命令失败");
                    return;
                }
    
                //触发命令
                dicCmds[cmd].Invoke(data);
            }
    
            #endregion
        }
     /// <summary>
        /// 命令接口
        /// </summary>
        public interface ICmd
        {
        }
    /// <summary>
        /// 游戏对象实体类型
        /// </summary>
        public enum EnumEntityType
        {
            None,
            Boss,
            Player,
        }
    
        /// <summary>
        /// 游戏对象处理的命令类型
        /// </summary>
        public enum EnumCmdType
        {
            None,
        }
  • 相关阅读:
    设置发光字
    QQ空间无导航条应对方法
    网页设计经典网站欣赏
    页面居中显示
    获取元素的绝对位置
    输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
    最长重复子字符串
    从头到尾彻底解析Hash 表算法
    求二叉树中节点的最大距离
    MySQL学习笔记——显示数据库信息
  • 原文地址:https://www.cnblogs.com/Dean27/p/7986284.html
Copyright © 2011-2022 走看看