public interface IState { string Name { get; } Action EnterAction { get; } Action UpdateAction { get; } Action ExitAction { get; } } public class StateMachine<T> where T : IState { private T currentState; private Dictionary<string, IState> stateDict = new Dictionary<string, IState>(); private float updateInterval = 0.1f; private float updateTimer = 0f; public void AddState(T state) { stateDict[state.Name] = state; } public void SetState(string stateName) { if (currentState != null) { currentState.ExitAction(); } currentState = (T)stateDict[stateName]; currentState.EnterAction(); } public void Update() { updateTimer += Time.deltaTime; if (updateTimer >= updateInterval) { if (currentState != null) { currentState.UpdateAction(); } updateTimer = 0f; } } } public class IdleState : IState { public string Name { get { return "Idle"; } } public Action EnterAction { get { return () => { /* Do idle behavior */ }; } } public Action UpdateAction { get { return () => { /* Do idle behavior */ }; } } public Action ExitAction { get { return () => { /* Do idle behavior */ }; } } } public class WalkingState : IState { public string Name { get { return "Walking"; } } public Action EnterAction { get { return () => { /* Do walking behavior */ }; } } public Action UpdateAction { get { return () => { /* Do walking behavior */ }; } } public Action ExitAction { get { return () => { /* Do walking behavior */ }; } } } public class RunningState : IState { public string Name { get { return "Running"; } } public Action EnterAction { get { return () => { /* Do running behavior */ }; } } public Action UpdateAction { get { return () => { /* Do running behavior */ }; } } public Action ExitAction { get { return () => { /* Do running behavior */ }; } } 请使用这段代码写出具体使用示例代码}
时间: 2023-04-05 15:03:45 浏览: 54
// 创建状态机
StateMachine<IState> stateMachine = new StateMachine<IState>();
// 添加状态
stateMachine.AddState(new IdleState());
stateMachine.AddState(new WalkingState());
stateMachine.AddState(new RunningState());
// 设置初始状态
stateMachine.SetState("Idle");
// 循环更新状态
while (true) {
stateMachine.Update();
}
相关问题
public interface IState { string Name { get; } Action EnterAction { get; } Action UpdateAction { get; } Action ExitAction { get; } } public class StateMachine<T> where T : IState { private T currentState; private Dictionary<string, IState> stateDict = new Dictionary<string, IState>(); private float updateInterval = 0.1f; private float updateTimer = 0f; public void AddState(T state) { stateDict[state.Name] = state; } public void SetState(string stateName) { if (currentState != null) { currentState.ExitAction(); } currentState = (T)stateDict[stateName]; currentState.EnterAction(); } public void Update() { updateTimer += Time.deltaTime; if (updateTimer >= updateInterval) { if (currentState != null) { currentState.UpdateAction(); } updateTimer = 0f; } } } public class IdleState : IState { public string Name { get { return "Idle"; } } public Action EnterAction { get { return () => { /* Do idle behavior */ }; } } public Action UpdateAction { get { return () => { /* Do idle behavior */ }; } } public Action ExitAction { get { return () => { /* Do idle behavior */ }; } } } public class WalkingState : IState { public string Name { get { return "Walking"; } } public Action EnterAction { get { return () => { /* Do walking behavior */ }; } } public Action UpdateAction { get { return () => { /* Do walking behavior */ }; } } public Action ExitAction { get { return () => { /* Do walking behavior */ }; } } } public class RunningState : IState { public string Name { get { return "Running"; } } public Action EnterAction { get { return () => { /* Do running behavior */ }; } } public Action UpdateAction { get { return () => { /* Do running behavior */ }; } } public Action ExitAction { get { return () => { /* Do running behavior */ }; } } }如何使用
这是一个状态机的示例代码,可以用于控制游戏角色的行为。首先需要定义不同的状态,例如IdleState、WalkingState和RunningState,每个状态都实现了IState接口,包括Name、EnterAction、UpdateAction和ExitAction四个属性或方法。然后可以创建一个StateMachine<T>对象,其中T是状态的类型,通过AddState方法添加不同的状态,通过SetState方法设置当前状态,通过Update方法更新状态。在每个状态的EnterAction、UpdateAction和ExitAction方法中,可以编写具体的行为逻辑。
public interface IState { void Enter(); void Update(); void Exit(); } public class IdleState : IState { public void Enter() { // Do idle behavior } public void Update() { // Do idle behavior } public void Exit() { // Do idle behavior } } public class WalkingState : IState { public void Enter() { // Do walking behavior } public void Update() { // Do walking behavior } public void Exit() { // Do walking behavior } } public class RunningState : IState { public void Enter() { // Do running behavior } public void Update() { // Do running behavior } public void Exit() { // Do running behavior } } public class StateMachine<T> where T : IState { private T currentState; public void SetState(T newState) { if (currentState != null) { currentState.Exit(); } currentState = newState; currentState.Enter(); } public void Update() { if (currentState != null) { currentState.Update(); } } }
这是一个关于状态机的代码实现,其中定义了一个接口 IState,以及三个实现了该接口的类 IdleState、WalkingState 和 RunningState。另外还有一个泛型类 StateMachine,用于管理状态的转换和更新。在该类中,通过 SetState 方法可以切换当前状态,而 Update 方法则用于更新当前状态的行为。