[Unity3D] 通过修改PlayMaker源代码实现进化版的FSM

PlayMaker是我很喜欢的Unity3d开发插件,事实上游戏开发本身就是一个对[状态]的控制,FSM Editor的可视化编辑器完美的实现了这一点。

但是PlayMaker对于深度开发者而言是不友善的, 因为它没有使用接口来规范类型定义,所有的类都必须继承于PlayMakerFSM类。而PlaymakerFSM是MonoBehaviour的子类。换言之,假如我需要一个 NetworkBehaviour同时又要在上面实现FSM,在PlayMaker作者提供的框架上是不可能的。

我的需求:

1. 所有的自定义类型,包括继承于MonoBehaviour, UIBehavior, NetworkBehaviour的类都需要能成为一个FSM载体。并且能够在FSM Editor中编辑。

2. 摒弃PlayMakerFSM自带的基于Unity4时代的网络功能相关的代码


我的解决方案:

1.反编译PlayMakerFSM/ PlayMakerEditor这两个dll

2 用IFSM_Behaviour接口导出 FSM的关键变量和方法。如Fsm对象的引用,SendEvent()方法

3.修改 #1中反编译之后的代码,对所有引用到 PlayMakerFSM类的地方进行解耦合,这里总共改了大约300多处


结果:

相当令人满意,现在我可以使用任何自定义的类型成为一个搭载FSM的载体,例如:

定义一个 UIFSM: 

public class UIFSM : UIBehaviour, IFSM_Behavior

{

//实现IFSM_Behaviour接口

}

同时这个UIFSM可以在PlayMakerFSM Editor 中像任何一个 FSM那样编辑。



你可能感兴趣的:(游戏开发)