playmaker与uscript使用后的比较 PlayMaker
优点
1、基于PlaymakerFsm Comp**nt,内核在该组件中进行,Fsm中的设置全部序列化,不用编译。
2、有基于实例化在场景中的GameObject所在的Fsm的Runtime Debugging。这个非常牛逼
比如两个同样的Fsm,但实例化出来2个GameObject,选择一个后就只会Debug当前选择。
3、进入某一个State之后,只会执行该State里的Action相应代码,不会涉及到非当前的State代码,这个比较清晰,相比uScript里所有Action.Update()都会在宿主Update的时候一起调用。
4、有比较好的Fsm之间的通讯方式,虽然EventInfo不够详细,但可扩展。
5、有Template之说,可以大量重用已有的解决方案。包括在一个Fsm中运行一个基于Template的SubFsm。
缺点
1、参考优点1中所述,大量的序列化的数据保存,比如Fsm对象,State,Action都有序列化的值,可能会增加Build后的尺寸
2、Fsm的Variables中,无法添加Array类型。比如FsmBool[] 没有,只有FsmBool,这不是扯么~~~~。不过正在研究添加一套Array操作的Actions来解决一下。
3、制作成Prefab之后,场景中实例出来的以及Prefab本身,都会在PlayMaker编辑器窗口罗列出来,有很多Fsm时,来回切换选择时比较麻烦,而且Instance和Prefab的修改要唯一,否则很容易互相覆盖修改,导致出现奇怪的问题(特别是删减Variables时)。建议要么只修改Instance的Go,然后Apply,要么只修改Prefab来引起Instance的更新。
uScript
优点
1、编译出最终代码,比较干净清晰,少量序列化的值
2、能Reflect任何已有类的变量、Property、方法等,对已有插件或代码组件的支持比较好。
3、有Nested Graph之说,可以嵌套Graph
4、uScript还比较新,才1.0.25xx的版本,可以给他一个提升的期望空间~。
缺点
1、Debug不方便,不清晰,可参考playMaker优点2。
2、每个带Update的Action,都会在宿主的Update中调用,即使未运行到该Action。如果自己写的Action的Update没考虑这个,增加了很多复杂操作,会拖性能。
3、尚未发现比较现成的Graph之间的通讯方式,除了SendMessage。
4、Graph中私有变量无法赋值,特别是静态资源,比如一个AudioClip变量,无法直接赋值到Asset中的xx.wav。只有’Exposed to Unity’之后,才可以在被赋予Graph对应的组件赋值,有点傻。
|