Unity有限状态机
来源:互联网 发布:伊吹级巡洋舰数据 编辑:程序博客网 时间:2024/05/20 00:35
参考:http://www.cnblogs.com/unity3/archive/2013/04/05/3000692.html
但是原作者代码有点问题,自己进行了改写
using System.Collections;using System.Collections.Generic;using UnityEngine;public enum Translate{ NullTrans, SeePlayer, PlayerStop}public enum StateID{ NullState, Idle, FollowPlayer,}public abstract class FMS_State{ private StateID id; public StateID ID { set { id = value; } get { return id; } } public virtual void DoBeforeEnter() { } public virtual void DoBeforeMoveing() { } public abstract void Reason(GameObject player, GameObject NPC); public abstract void Act(GameObject player, GameObject NPC);}public class Idle_State : FMS_State{ FMS_Machine_Manage _fms_machine_Manage; public Idle_State(FMS_Machine_Manage mrg) { _fms_machine_Manage = mrg; ID = StateID.Idle; } public override void Reason(GameObject player, GameObject NPC) { if (Input.GetKeyDown(KeyCode.Z)) { _fms_machine_Manage.changeState(Translate.SeePlayer); } } public override void Act(GameObject player, GameObject NPC) { Debug.Log("Act_Idle"); }}public class Follow_State : FMS_State{ FMS_Machine_Manage _fms_machine_Manage; public Follow_State(FMS_Machine_Manage mrg) { _fms_machine_Manage = mrg; ID = StateID.FollowPlayer; } public override void Reason(GameObject player, GameObject NPC) { if (Input.GetKeyDown(KeyCode.X)) { _fms_machine_Manage.changeState(Translate.PlayerStop); } } public override void Act(GameObject player, GameObject NPC) { Debug.Log("Act_Follow"); }}public class FMS_Machine_Manage : MonoBehaviour { private List<FMS_State> states; private Dictionary<Translate, StateID> map = new Dictionary<Translate, StateID>(); private FMS_State currentState; private StateID currentStateID; public GameObject player; public GameObject NPC; public FMS_State CurrentState { set { currentState = value; } get { return currentState; } } public StateID CurrentStateID { set { currentStateID = value; } get { return currentStateID; } } public void UpdateFunction() { CurrentState.Reason(player, NPC); CurrentState.Act(player, NPC); } void Awake() { states = new List<FMS_State>(); } public void addDictionary(Translate tr, StateID id1) { if (tr == Translate.NullTrans) { Debug.LogError("Null Trans is not allower to adding into"); return; } if (id1 == StateID.NullState) { Debug.LogError("Null State id not ~~~"); return; } if (map.ContainsKey(tr)) { Debug.LogError(id1.ToString() + "is already added to"); return; } map.Add(tr, id1); } public void deleateDictionary(Translate tr) { if (tr == Translate.NullTrans) { Debug.LogError("TransNull is not allowed to delate"); return; } if (map.ContainsKey(tr)) { map.Remove(tr); return; } Debug.LogError(tr.ToString() + "are not exist"); } public StateID GetOutState(Translate tr) { if (map.ContainsKey(tr)) { return map[tr]; } return StateID.NullState; } public void MakeFMSMachine() { Idle_State idle = new Idle_State(this); Follow_State follow = new Follow_State(this); AddFmsState(idle); AddFmsState(follow); addDictionary(Translate.PlayerStop, StateID.Idle); addDictionary(Translate.SeePlayer, StateID.FollowPlayer); } public void AddFmsState(FMS_State s) { if (s == null) { Debug.LogError(" Null reference is not allowed"); } if (states.Count == 0) { states.Add(s); currentState = s; currentStateID = s.ID; return; } foreach (FMS_State state in states) { if (state == s) { Debug.LogError(s.ID.ToString() + "has already been added"); return; } } states.Add(s); } public void delateFmsState(StateID id) { if (id == StateID.NullState) { Debug.LogError("NullStateID is not allowed for a real state"); return; } foreach (FMS_State state in states) { if (state.ID == id) { states.Remove(state); return; } } } public void changeState(Translate tr) { if (tr == Translate.NullTrans) { Debug.LogError("NullTransition is not allowed for a real transition"); return; } StateID id = GetOutState(tr); currentStateID = id; foreach (FMS_State state in states) { if (currentStateID == state.ID) { CurrentState.DoBeforeMoveing(); currentState = state; CurrentState.DoBeforeEnter(); break; } } }}
阅读全文
0 0
- unity 有限状态机
- Unity有限状态机
- Unity有限状态机
- Unity有限状态机实现
- unity 有限状态机使用
- unity 有限状态机使用
- unity 有限状态机(一)
- Unity有限状态机详解
- unity AI之有限状态机
- Unity FSM有限状态机
- 【Unity】Finite State Machine 有限状态机
- 在Unity中实现有限状态机
- unity 一个简单的有限状态机
- 在Unity中实现有限状态机
- 在Unity中实现有限状态机
- unity游戏开发中的有限状态机FSM经验
- Unity Game Programming AI(2)有限状态机
- Unity 客户端框架(一):有限状态机
- 常用的Dialog
- springboot+thymeleaf 实现thymeleaf自定义方言系统 自定义标签, cms系统搭建(二)
- 小店开张
- python 常用函数收集
- IDEA自动编译设置
- Unity有限状态机
- 1055-only_full_group_by 分组查询报错解决方案
- [转]悬浮控件的实现
- Arcpy为本地数据按指定要求添加字段
- sqlserver 数据区间补全
- Cydia Substrate
- framework audio通路控制
- JS判断是否为IE浏览器
- 程序员的收藏夹