Unity3D应用有限状态机
1 using GDGeek; 2 using System.Collections; 3 using UnityEngine; 4 5 public class Ctrl : MonoBehaviour { 6 7 /* 8 有限状态机 9 有限状态机是可以把游戏划分成很多状态,这些状态可以在耦合度很低的状态下各自切换, 10 如: 11 1、游戏接入时的状态; 12 2、游戏玩的时候的状态; 13 3、游戏结束时候的状态; 14 * 15 * 这三个状态可以分别去控制他们, 16 * 他是最简单而又使用广泛的人工智能基础组件之一, 17 * 基本上所有的游戏都是可以用有限状态机来调度他们的逻辑和人工智能的 18 */ 19 20 21 /* 22 MVC最重要的一点 23 24 控制层可以调用显示层和模型层 25 但是模型层和显示层不能互相调用 26 */ 27 28 29 //创建一个有限状态机的工具 30 private FSM fsm_ = new FSM(); 31 32 public View _view = null; 33 34 //发一个字符串给有限状态机 35 //begin 和 end 都会给有限状态机发送消息 36 37 public void fsmPost(string msg) { 38 fsm_.post(msg); 39 40 } 41 42 void Start () { 43 fsm_.addState ("begin",beginState()); 44 fsm_.addState ("play",playState()); 45 fsm_.addState ("end",endState()); 46 fsm_.init("begin"); 47 } 48 49 //登录的状态 50 State beginState() 51 { 52 StateWithEventMap state = new StateWithEventMap(); 53 state.onStart += delegate 54 { 55 _view.begin.gameObject.SetActive(true); 56 }; 57 58 state.onOver += delegate 59 { 60 _view.begin.gameObject.SetActive(false); 61 }; 62 63 //接收到状态,打开第二个界面 64 state.addEvent("begin","play"); 65 66 67 return state; 68 } 69 70 71 //游戏状态 72 State playState() 73 { 74 75 //StateWithEventMap state = new StateWithEventMap(); 76 77 //异步系统,可以理解为一个异步处理工具 78 79 //state 状态 80 StateWithEventMap state = TaskState.Create(delegate 81 { 82 TaskWait tw = new TaskWait(); 83 //等待3秒钟 84 tw.setAllTime(3f); 85 //切换到 86 return tw; 87 //return new Task(); 88 }, fsm_,"end"); 89 90 91 92 state.onStart += delegate 93 { 94 _view.play.gameObject.SetActive(true); 95 }; 96 97 state.onOver += delegate 98 { 99 _view.play.gameObject.SetActive(false); 100 }; 101 return state; 102 } 103 104 105 //游戏结束状态 106 State endState() 107 { 108 StateWithEventMap state = new StateWithEventMap(); 109 state.addEvent("end", "begin"); 110 111 112 113 state.onStart += delegate 114 { 115 _view.end.gameObject.SetActive(true); 116 }; 117 118 state.onOver += delegate 119 { 120 _view.end.gameObject.SetActive(false); 121 }; 122 123 return state; 124 } 125 126 127 void Update () { 128 129 } 130 }
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class View : MonoBehaviour { 6 7 8 //开始界面 9 public GameObject begin = null; 10 //游戏界面 11 public GameObject play = null; 12 //结束界面 13 public GameObject end = null;
有3个Panle的界面来回切换,在begin界面点击开始游戏按钮切换到play界面(3秒后切换到end界面),在end界面单机重新开始按钮回到begin界面
这个东西好像很深奥的样子。。。
我自横刀向天笑,去留肝胆两昆仑