【参考链接】状态机代码原型参考链接:http://wiki.unity3d.com/index.php/Finite_State_Machine
【背景说明】在本例状态机中,每次添加新状态(StateID)新过度条件 (Transition),都需要在同一个地方添加。如果有A、B两个互不相关的类使用状态机,A只有A专属的状态和条件,B只有B专属的状态和条件,都需要将本来互不干涉互相分离的状态枚举添加到这同一个定义下。
/// <summary>
/// Place the labels for the Transitions in this enum.
/// Don't change the first label, NullTransition as FSMSystem class uses it.
/// </summary>
public enum Transition
{
NullTransition = 0, // Use this transition to represent a non-existing transition in your system
TransitionA1,//A专属条件1
TransitionA2,//A专属条件2
TransitionAs,//A专属条件等等
TransitionB1,//B专属条件1
TransitionB2,//B专属条件2
TransitionBs,//B专属条件等等
}
/// <summary>
/// Place the labels for the States in this enum.
/// Don't change the first label, NullTransition as FSMSystem class uses it.
/// </summary>
public enum StateID
{
NullStateID = 0, // Use this ID to represent a non-existing State in your system
StateIDA1,//A专属状态1
StateIDA2,//A专属状态2
StateIDAs,//A专属状态等等
StateIDB1,//B专属状态1
StateIDB2,//B专属状态2
StateIDBs,//B专属状态等等
}
【需求说明】我希望A和B之间能分开独立,类似于
public class A
{
public enum TransitionA
{
TransitionA1,//A专属条件1
TransitionA2,//A专属条件2
TransitionAs,//A专属条件等等
}
public enum StateIDA
{
StateIDA1,//A专属状态1
StateIDA2,//A专属状态2
StateIDAs,//A专属状态等等
}
//其他
}
public class B
{
public enum TransitionB
{
TransitionB1,//B专属条件1
TransitionB2,//B专属条件2
TransitionBs,//B专属条件等等
}
public enum StateIDB
{
StateIDB1,//B专属状态1
StateIDB2,//B专属状态2
StateIDBs,//B专属状态等等
}
//其他
}
但是这样FSMState类中定义的字典类型Dictionary<Transition, StateID> map将无法复用
请问我应如何修改以实现类似的(分离、解耦)?
同学你好,可以使用这个方法去做一个仿枚举继承,后续子类条件可以继承父类,就可以放一个字典里了,也可以封装成新的状态类和条件类。