Unity角色行为状态机框架设计
来源:互联网 发布:淘宝主图点击率怎么看 编辑:程序博客网 时间:2024/06/07 03:17
本文提供了一个简单的角色行为状态机的实现,把角色状态类当成角色类的一个属性来实现,把角色的行为拆分成多个状态子类来实现,降低代码耦合度。
源码下载地址
行为状态基类:只提供几个最基本的方法。
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class BaseMode{ public GAME_MODE_TYPE mModeType; protected PlayerController mPlayer; //状态初始化 public virtual void Init(PlayerController player) { mPlayer = player; } //状态开始 public virtual void Begin (object[] mParams){ Debug.Log(mModeType.ToString() + "|Begin");} //状态更新 public virtual void Update() { Debug.Log(mModeType.ToString() + "|Update"); } //状态结束 public virtual void End (){ Debug.Log(mModeType.ToString() + "|End"); } //输入控制 public virtual void InputHandle() { }}
状态机子类:
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class RunningMode : BaseMode{ public RunningMode() { mModeType = GAME_MODE_TYPE.Running; } public override void Begin(object[] mParams) { base.Begin(mParams); } public override void Update() { base.Update(); } public override void End() { base.End(); } public override void InputHandle() { }}
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class DeathMode : BaseMode{ public DeathMode() { mModeType = GAME_MODE_TYPE.Death; } public override void Begin(object[] mParams) { base.Begin(mParams); } public override void Update() { base.Update(); } public override void End() { base.End(); } public override void InputHandle() { }}
状态机配置表:
using UnityEngine;using System.Collections;using System.Collections.Generic;public static class GameModeConfig{ public static DictionaryCreatGameModeDict(PlayerController mPlayer) { var mDict = new Dictionary () { { GAME_MODE_TYPE.Running,new RunningMode()}, { GAME_MODE_TYPE.Death,new DeathMode()}, }; foreach (var item in mDict) { item.Value.Init(mPlayer); } return mDict; }}public enum GAME_MODE_TYPE{ Running, Death,}
角色控制器
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class PlayerController : MonoBehaviour{ private BaseMode mCurGameMode; private DictionarymGameModeDict = new Dictionary (); void Start() { //角色初始化应该在角色管理器初始化,此处仅作测试 Init(); } //角色控制器初始化 void Init() { InitMode(); ChangeMode(GAME_MODE_TYPE.Running); } void Update() { //当前状态更新 if (mCurGameMode != null) { mCurGameMode.Update(); } } //初始化状态 public void InitMode() { mGameModeDict.Clear(); mGameModeDict = GameModeConfig.CreatGameModeDict(this); } //切换状态 public void ChangeMode(GAME_MODE_TYPE mType, object[] mParams = null) { //执行上个状态的结束 if (mCurGameMode != null) { mCurGameMode.End(); } mCurGameMode = mGameModeDict[mType]; //执行当前状态的开始 mCurGameMode.Begin(mParams); } //是否是该状态 public bool IsGameMode(GAME_MODE_TYPE mType) { if (mCurGameMode != null && mCurGameMode.mModeType == mType) { return true; } return false; } #region 测试代码 void OnGUI() { if (GUILayout.Button("ChangeRunning")) { ChangeMode(GAME_MODE_TYPE.Running); } if (GUILayout.Button("ChangeDeath")) { ChangeMode(GAME_MODE_TYPE.Death); } } #endregion}
阅读全文
1 0
- Unity角色行为状态机框架设计
- Unity框架——状态机
- Unity行为树框架
- unity状态机
- 报警状态机分析及框架设计
- StateMachineBehaviour状态机行为
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- 状态机框架
- 状态机设计
- 状态机设计
- Unity MMO游戏架构设计之角色设计一
- Unity MMO游戏架构设计之角色设计二
- Unity3D之利用新动画状态机设计的UI框架
- unity中的状态机
- unity-动画状态机Animator
- unity-动画状态机Animator
- 通用unity状态机
- 使用servlet来实现表单的登录机制并用filter来进行过滤操作
- 安装openssh-server报Depends: openssh-client (= 1:6.6p1-2ubuntu2.8)错误
- 补昨日博客-使用putty登录Windows实现虚拟机中的系统的开机、关机、重启
- Android事件分发机制——从基础深入源码解析
- shell '%'通配符和 '#' 通配符的使用
- Unity角色行为状态机框架设计
- Timeline--Activation Track
- Ubuntu 16.04-HBase1.3.1+Hadoop2.6.5 单机环境搭建
- wechat小程序学习(一)
- QuestaSim使用及Makefile命令
- Python 之 【re模块的正则表达式学习】
- Go-ethereum编译过程分析(一)
- virtualenvwrapper配置报错
- C#用SqlCommandBuilder 更新数据库数据,解决更新数据不同步到数据库