在Unity中实现有限状态机
来源:互联网 发布:手机网络连接异常101 编辑:程序博客网 时间:2024/05/07 22:53
在Unity中实现有限状态机
在Unity中实现有限状态机
收藏文章分享
简介
有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 -- 引用百度百科的解释:
有限状态机(FSM)是游戏AI的一种常用模型,我做一个简单的记录,在Unity中实现有限状态机模型.
FSM的结构和逻辑
整体结构分为4个部分
- AIController
- FSM
- IState
- MoveState, AttackState, IdleState, DieState
解释:
1.其中AIController用于实现各种行为动作,它作为AI行为动作的控制器.
2.FSM用于存放判断参数和统一调用各状态机
3.IState状态机接口,等待各种状态机实现其功能
4.各种State,每个状态机内部实现开关逻辑实现FSM
创建一个AIController
创建一个AIController,绑定在怪物身上,用于控制怪物做什么事情
public class AIController : MonoBehaviour { public FSM fsm; void Start () { fsm = GetComponent<FSM> (); fsm.ac = this; //初始化一个默认状态机 fsm.ChangeState(new MoveState()); } public void Move(){ Debug.Log("move"); } public void Attack(){ Debug.Log("attack"); }
创建一个FSM
FSM用于传递状态机,创建一个FSM绑定在怪物身上
public class FSM : MonoBehaviour { public IState currentState{ get; private set;} public bool isCanAttack; public bool isCanMove; public AIController ac; void Start () { } public void ChangeState(IState newState){ currentState = newState; } void Update () { if (currentState != null && ac != null) { currentState.Execute (ac); } }}
创建一个状态机接口:IState
public interface IState{ void Execute(AIController ac);}
创建多个状态机
在状态机中实现判断和调用AIController的行为方法
MoveState:
public class MoveState : IState { public void Execute (AIController ac) { if (ac.fsm.isCanMove) { ac.Move(); } else { ac.fsm.ChangeState(new IdleState()); } }}
AttackState:
public class AttackState : IState { public void Execute (AIController ac) { if (ac.fsm.isCanAttack) { ac.Attack(); } else { ac.fsm.ChangeState(new MoveState()); } }}
0 0
- 在Unity中实现有限状态机
- 在Unity中实现有限状态机
- 在Unity中实现有限状态机
- Unity有限状态机实现
- 游戏中有限状态机实现
- unity 有限状态机
- Unity有限状态机
- Unity有限状态机
- 怎样在有限状态机中延时
- 有限状态机在游戏中应用
- 在Unity中实现TreeView
- Unity 内的敌人AI 或者 有限状态机FSM实现AI
- 有限状态机在程序设计中作用和意义
- 程序中有限状态机自动机实现逻辑简化
- unity 有限状态机使用
- unity 有限状态机使用
- unity 有限状态机(一)
- Unity有限状态机详解
- pl/sql developer 执行输出时中文乱码问题
- Android之ContentProvider
- Linux集群批量管理工具parallel-ssh(PSSH)的安装与使用
- 获得建表或索引的方法
- zookeeper会话及普遍模型
- 在Unity中实现有限状态机
- ubuntu 下maven的安装配置
- Platform设备模型
- 深度解析AbstractQueuedSynchronizer实现原理(下)
- CIFS与NFS
- 当Window遇到Mac OS出现Permission Denied/Could not expand时
- 高级产品经理教你如何进行用户画像及其应用场景
- java_day02_位运算符
- 如何卸载Eclipse安装的插件