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


一个游戏有两个工具是一定离不开的,一个是节点型工具,典型代表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无法向下一个状态传递信息)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值