playmaker 如何判断状态机是否在运行
1个回答
展开全部
刚开始用Unity和PlayMaker,用得不是很熟。要做的是一个回合制战斗,敌方和我方的战斗逻辑都是用PM状态机实现的,编辑好Prefab中的FSM再拖入场景中。以己方Prefab为例,其中包含一个Hero02模型文件,一个Player_replace_with_real模型文件,一个shadow表示阴影,FSM则加在Player1上,做一些移动、播放动画、攻击等逻辑判断和操作。
PlayMaker的状态机FSM重用
现在遇到的问题是:
把player1拖到场景中后的Instance(命名为PlayerA等)需要更换模型,但是如果把Instance的Hero02这个child删掉并加上新的模型,那么这个instance就会和prefab断开连接,之后再改prefab的FSM就不会对场景中的instance产生影响。我希望能够有办法动态更换child模型,或者换个思路,给不同的game object绑定同样的FSM实现重用。试了一下,两种方法均可实现:
一、动态更换child:
1、prefab中去掉Hero02这个child
2、在prefab中定义两个GameObject类型的variable,一个为playerModel,用于保存玩家模型,另一个为initPlayerModel,并勾选Inspector以便在面板上控制它,这个变量用做外部的模型初始化
3、编写prefab的FSM,在起始state中增加Action: Create Object,参数如下:
PlayMaker的状态机FSM重用
initPlayerModel在Inspector中已经被指定初始化了,用这个action创建一个GameObject,存在playerModel这个变量中。以后对模型做各种操作(比如播放动画)就用playerModel这个变量了。initPlayerModel似乎不能直接用,我一开始没用Create Object而是直接使用initPlayerModel这个变量,不起作用,不知道为什么。
4、此时创建出来的Object是在场景根目录下的,运行中可以看到。最好将其设为player的child。但是PM没要提供add child这个操作,于是迂回一下,用set parent,将playerModel的父节点设为本prefab
PlayMaker的状态机FSM重用
5、Instance之后,在Inspector面板上初始化initPlayerModel参数。
Done~~
二、FSM模版
1、编写好FSM,右击FSM区域,save template保存成一个模版文件。
2、场景中创建好Game Object(不需要对应FSM的prefab),在inspector面板上Add Component,选择PlayMakerFSM,增加PM component,其中的Use Template属性设为刚保存的模版。
PlayMaker的状态机FSM重用
现在遇到的问题是:
把player1拖到场景中后的Instance(命名为PlayerA等)需要更换模型,但是如果把Instance的Hero02这个child删掉并加上新的模型,那么这个instance就会和prefab断开连接,之后再改prefab的FSM就不会对场景中的instance产生影响。我希望能够有办法动态更换child模型,或者换个思路,给不同的game object绑定同样的FSM实现重用。试了一下,两种方法均可实现:
一、动态更换child:
1、prefab中去掉Hero02这个child
2、在prefab中定义两个GameObject类型的variable,一个为playerModel,用于保存玩家模型,另一个为initPlayerModel,并勾选Inspector以便在面板上控制它,这个变量用做外部的模型初始化
3、编写prefab的FSM,在起始state中增加Action: Create Object,参数如下:
PlayMaker的状态机FSM重用
initPlayerModel在Inspector中已经被指定初始化了,用这个action创建一个GameObject,存在playerModel这个变量中。以后对模型做各种操作(比如播放动画)就用playerModel这个变量了。initPlayerModel似乎不能直接用,我一开始没用Create Object而是直接使用initPlayerModel这个变量,不起作用,不知道为什么。
4、此时创建出来的Object是在场景根目录下的,运行中可以看到。最好将其设为player的child。但是PM没要提供add child这个操作,于是迂回一下,用set parent,将playerModel的父节点设为本prefab
PlayMaker的状态机FSM重用
5、Instance之后,在Inspector面板上初始化initPlayerModel参数。
Done~~
二、FSM模版
1、编写好FSM,右击FSM区域,save template保存成一个模版文件。
2、场景中创建好Game Object(不需要对应FSM的prefab),在inspector面板上Add Component,选择PlayMakerFSM,增加PM component,其中的Use Template属性设为刚保存的模版。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询