Points表示四个点位,敌人在这四个点之间来回巡逻。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
/// <summary>
/// 状态ID
/// </summary>
public enum FSMStateID
{
NullFSMStateID,
PatrolFSMStateID,//巡逻状态
ChaseFSMStateID,//追逐状态
}
/// <summary>
/// 状态转化条件
/// </summary>
public enum FSMTransition
{
SeePlayer,//看到主角(目标)
LeavePlayer,//远离敌人(目标)
}
public class FSMSystem
{
private FSMStateID mCurrentStateID;
private FSMBaseState mCurrentState;
private Dictionary<FSMStateID, FSMBaseState> mFSMStateDic = new Dictionary<FSMStateID, FSMBaseState>();
public void AddFSMSate(FSMBaseState state)
{
if (state == null)
{
Debug.Log("角色状态为空,无法添加");
return;
}
if (mCurrentState == null)
{
//第一个添加的状态被作为系统首个运行的状态
mCurrentStateID = state.mStateID;
mCurrentState = state;
mCurrentState.StateStart();
}
if (mFSMStateDic.ContainsValue(state))
{
Debug.Log("容器内存在该状态");
return;
}
mFSMStateDic.Add(state.mStateID, state);
}
public void DeleteFSMSate(FSMBaseState state)
{
if (state == null)
{
Debug.Log("角色状态为空,无法添加");
return;
}
if (!mFSMStateDic.ContainsValue(state))
{
Debug.Log("容器内不存在该状态");
return;
}
mFSMStateDic.Remove(state.mStateID);
}
//更新(执行)系统
public void UpdateSystem()
{
if (mCurrentState != null)
{
mCurrentState.StateUpdate();
mCurrentState.TransitionReason(