开始的时候想用lua写的 比较简便 代码也有现成的
但是考虑到还是以学习为主 就把思想转到cs实现一遍
这篇文章可以认为是对前几天的解决Unity多线程问题中的状态机的一个简单实现
先来看看将要实现的状态机(本人不想画图 喜欢用文字描述 后期修改再说吧。。。)
FSMBase.cs
using UnityEngine;
using System.Collections;
public abstract class FSMBase
{
public abstract void HandleActor(Actor actor);
}
FSMMain.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//状态
public enum State
{
WAIT,
MOVE,
ATTACK_A,
ATTACK_B,
POWER,
}
//动作
public enum Actor
{
KEY_W,
MOUSE_LEFT,
MOUSE_RIGHT,
WAIT_TIME,
IMMEDIATELY,
KEY_SPACE
}
public class FSMMain : MonoBehaviour
{
public static FSMMain _instance;
public State currState;
List<Actor> actorList = new List<Actor>();
但是考虑到还是以学习为主 就把思想转到cs实现一遍
这篇文章可以认为是对前几天的解决Unity多线程问题中的状态机的一个简单实现
先来看看将要实现的状态机(本人不想画图 喜欢用文字描述 后期修改再说吧。。。)
共 5 种状态
wait
move
attack_a
attack_b
power
将要实现的过程是:
在wait状态下:
可以转到 move 移动(这里有 3 秒的判断时间) 可以转到 attack_a 攻击 或者 attack_b 攻击
move:
可回到wait 可转到attack_a攻击
attack_a状态:
可转到wait
attack_b状态:
可转到power 可转到wait (这里有 3 秒的判断时间)
power状态:
可转到wait
通过以上的信息 应该能够自行画出状态图 至于其中每个状态的动作 在下面的代码中就可以看到
FSMBase.cs
using UnityEngine;
using System.Collections;
public abstract class FSMBase
{
public abstract void HandleActor(Actor actor);
}
FSMMain.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//状态
public enum State
{
WAIT,
MOVE,
ATTACK_A,
ATTACK_B,
POWER,
}
//动作
public enum Actor
{
KEY_W,
MOUSE_LEFT,
MOUSE_RIGHT,
WAIT_TIME,
IMMEDIATELY,
KEY_SPACE
}
public class FSMMain : MonoBehaviour
{
public static FSMMain _instance;
public State currState;
List<Actor> actorList = new List<Actor>();