敌人AI有什么用:
AI是由预先设置好的程序来模拟出智能行为,玩家逐步了解,并且学习AI行为的过程也是游戏的乐趣之一。
游戏也可以根据AI的复杂程度来进行难度的划分。
那么如何去写一个AI呢?
最经典的就是if else大法,但是这种写法会导致代码可读性降低。还有有限状态机(FSM)和行为树。
今天我们就来简单的聊聊通过接口和字典来实现FSM的写法。
什么是有限状态机?
有限状态机(Finite State Machine, FSM),
又称有限状态自动机,简称状态机,是指在有限个状态之间按照一定规律转换。
代码
1 2 3 4 5 6 7 8 9
|
public interface IState { void OnEnter(); void OnUpdate(); void OnExit(); }
|
然后是状态机的本体代码,在这里我们将通过字典来储存状态,并且通过对应该的关键字来查找和切换状态
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
| using System; using System.Collections; using System.Collections.Generic; using UnityEngine;
public enum StateType { Idele } public class FSM : MonoBehaviour { private IState currentState; private Dictionary<StateType, IState> _states = new Dictionary<StateType, IState>(); private void Start() { _states.Add(StateType.Idele,new IdleState(this)); } public void TransitionState(StateType type) { if (currentState != null) { currentState.OnExit(); } currentState = _states[type]; currentState.OnEnter(); } }
|
然后我们来写idle状态的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class IdleState : IState { private FSM manager; public IdleState(FSM manager) { this.manager = manager; } public void OnEnter() { } public void OnUpdate() { } public void OnExit() { } }
|