Playmaker节点工具使用(一)—Action,Event,FsmValues

Playmaker节点工具使用(一)—Action,Event,FsmValues,第1张

文章目录
    • 创建自定义Action
    • 创建过度条件Event
    • 状态与变量传递Variable

一个游戏有两个工具是一定离不开的,一个是节点型工具,典型代表Playmaker,Bot,蓝图

一个节点型工具,使用时至少有三个基本功能绕不开

创建自定义Action

创造自定义Action的意义:
在Playmaker中,有很多现成的Action 可以使用,但是大部分时候,需要根据现有业务逻辑创造特定的Action,这可以自定义变量,自己掌握整个Action运作流程,比如虽然自带动画播放,但是根据实际情况还是需要自己写一个
比如需要结合轨道型工具做轨道间的动画过度,显然自带的动画不能帮助我们实现这个

在实际使用中自带的Action 参考意义更大

1.创造自定义Action步骤:继承FsmStateAction,实现其方法

[ActionCategory("Cutscene")]
public class PlayCutsceneAction : FsmStateAction
{
    [UnityEngine.Tooltip("Cutscene名字")]
    public string CutsceneName;


    public override void Reset()
    {
        base.Reset();
    }

    public override void OnEnter()
    {
        Debug.Log("播放Cuescene");
        CutsceneHelper.Play(Fsm.GameObject, CutsceneName);
        Finish();
    }

    public override void OnUpdate()
    {
        base.OnUpdate();
    }

    public override void OnExit()
    {
        base.OnExit();
    }
}

2.ActionCategory 表示分类,添加即可实现自定义行为

创建过度条件Event

自定义Event
Event是过度的条件,比较自由,根据Playmaker官方手册实现即可

1.可以在Action里使得action之间的过度行为成立(即发送了Event事件)
2.可以在Animation (动画片段中,发送事件)
3.可以在脚本中使得过度行为成立(比如在Action脚本中)

1,2参考手册连接:
https://hutonggames.fogbugz.com/default.asp?W128

3.通过脚本
如果是在Action脚本中,可以直接通过FSM发送Event事件
Fsm.SendEventToFsmOnGameObject(this.Owner,this.Fsm.Name,“IdleToRun”);

在非Action脚本中
静态对象Playmaker,获取FSM,然后发送即可,FsmList是场景所有的Fsm,需要找到目标Fsm

PlayMakerFSM.FsmList.First().SendEvent();
PlayMakerFSM.FsmList.First().Fsm.SendEventToFsmOnGameObject(...);

通过FsmName找对应的Fsm

PlayMakerFSM.FsmList.First().FsmName

静态对象FSm,获取FSMList,然后发送即可, Fsm.FsmList.First().SendEventToFsmOnGameObject(…);

状态与变量传递Variable

Playmaker 的状态会根据Action 依次Enter,然后依次Update,退出依次调用Exit

最基本的两个变量传递需求:
1.要在同一个状态的不同Action传递变量,
2.要在不同的状态,不同的Action传递变量,

有两个方法可以做到,
1.最简单的方法采用全局变量,这样所有状态的Action都可以访问到,

2.使用Playmaker Fsmvalue,推荐使用此方法,可视化更方便调试

使用自带的FsmValue,声明即可在Playmaker面板设置值

 public FsmFloat offsetTime;

然后新建变量/全局变量 即可在状态所有的Action 传递值(两个Action选择同一变量即可实现值传递)

定义自己的Fsmvalue
如果没有所选变量类型呢?这时候需要定义自己的Fsmvalue

Assets > Create > Playmaker > New Custom Variable Type Definition

Custom Variable Type Definition Error: Invalid object type (must be UnityEngine.Object or Enum): value1:Slate.myValue (Assets/ThirdParty/ParadoxNotion/SLATE Cinematic Sequencer/Directables/Clips/Runtime/AnimatorTrack/myValue.asset)

定义自定义的类型需要是 UnityEngine.Object or Enum ,比如官方示例的System.DayOfWeek


如果无法满足自己的需求,比如某些特殊数据结构需要在Cutscene之间进行数据传递,那只能脱离playmaker,做类似全局变量的存在了

Playmaker貌似无法从当前状态知道下一个即将进入的状态(即在某状态的Exit无法向下一个状态传递信息)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存