1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
| public class FSM : MonoBehaviour { public MonoStateMachine monoStateMachine = new MonoStateMachine();
public RunState RunState; public IdleState IdleState;
private void Start() { monoStateMachine.StartState(RunState);
}
private void Update() { monoStateMachine.Update(); } }
public class RunState : MonoState { public static RunState instance;
public static RunState Instance() { if (instance == null) { instance = new RunState(); } return instance; }
public override void Enter() { Debug.Log("进入跑步"); }
public override void Execute() { Debug.Log("开始跑步"); }
public override void Exit() { Debug.Log("退出跑步"); }
}
public class IdleState : MonoState {
public static IdleState instance;
public static IdleState Instance() { if (instance == null) { instance = new IdleState(); } return instance; }
public override void Enter() {
}
public override void Execute() {
}
public override void Exit() {
}
}
public class MonoState { public virtual void Enter() {
} public virtual void Execute() {
} public virtual void Exit() {
}
}
public class MonoStateMachine {
private MonoState mCurrentState; private MonoState mPreviousState; private MonoState mGlobalState;
public MonoStateMachine() { mCurrentState = null; mPreviousState = null; mGlobalState = null; }
public void StartState(MonoState state) { mCurrentState = state as MonoState; mCurrentState.Enter();
}
public void ChangeState(MonoState state) { if (state == null) { Debug.Log("无法找到此状态"); }
mPreviousState = mCurrentState; mCurrentState.Exit(); mCurrentState = state as MonoState; mCurrentState.Enter();
} public void RevertToPreviouState() { ChangeState(mPreviousState); }
public MonoState GetCurrentState() { return mCurrentState; }
public MonoState GetPreviousState() { return mPreviousState; }
public void Update() { if (mCurrentState!=null) { mCurrentState.Execute(); } } }
|