PlayMaker 不支持过渡条件

Posted 盘子脸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PlayMaker 不支持过渡条件相关的知识,希望对你有一定的参考价值。

Unity Animator 自带也支持过渡条件,  我看了下PlayMaker没有这个概念.  最近研究下PlayMaker,图形化编程的确很爽. 但是PlayMaker 始于与给一些策划进行流程设置. 用它来全程做游戏我感觉会的.

image

image

在Playmaker上自己封装的条件类

using HutongGames.PlayMaker;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CondFloat : BaseCond
{
    [UIHint(UIHint.FsmFloat)]
    public FsmFloat mVal1;
    public ECondition mCondition;
    [UIHint(UIHint.FsmFloat)]
    public FsmFloat mVal2;


    public override bool Condition()
    {
        if (mCondition == ECondition.Equal)
            return mVal1.Value == mVal2.Value;
        if (mCondition == ECondition.Less)
            return mVal1.Value < mVal2.Value;
        if (mCondition == ECondition.Greater)
            return mVal1.Value > mVal2.Value;

        return false;
    }
}

public class CondBool : BaseCond
{
    [UIHint(UIHint.FsmBool)]
    public FsmBool mVal1;
    public override bool Condition()
    {
        return mVal1.Value;
    }
}

public class CondString : BaseCond
{
    [UIHint(UIHint.FsmString)]
    public FsmString mVal1;
    [UIHint(UIHint.FsmString)]
    public FsmString mVal2;


    public override bool Condition()
    {
        return mVal1.Equals(mVal2);
    }
}

public class CondMethod : BaseCond
{
    [UIHint(UIHint.Method)]
    public FsmString mVal1;
    [UIHint(UIHint.Method)]
    public FsmString mVal2;
    
    public override bool Condition()
    {
        return mVal1.Equals(mVal2);
    }
}
[SerializeField]
public class BaseCond
{
    public string mEventName;

    public string GetEventName()
    {
        return mEventName;
    }

    public virtual bool Condition()
    {
        return false;
    }

}
public enum ECondition
{
    Less,
    Equal,
    Greater
}
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[ActionCategory(ActionCategory.Debug)]
[HutongGames.PlayMaker.Tooltip("发送事件")]
public class SendMethod : FsmStateAction
{
    public string mMethodName;

    public override void OnEnter()
    {
        this.Finish();
    }
}
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class CondAction : SendMethod
{
    public abstract BaseCond Condition { get;}

    public override void OnEnter()
    {
        bool l = Condition.Condition();
        string s = Condition.GetEventName();

        if (l)
        {
            this.Fsm.Event(s);
            Debug.Log("发送事件");
        }
        this.Finish();
    }
}
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class CondActionBool : CondAction
{
    public CondBool mCondition;

    public override BaseCond Condition
    {
        get
        {
            return mCondition;
        }
    }


}

代码浏览

image

代码地址: https://gitee.com/PFSchool/UFrame.git    ScriptTools文件夹下

以上是关于PlayMaker 不支持过渡条件的主要内容,如果未能解决你的问题,请参考以下文章

FragmentNavigator 共享过渡不起作用

如何正确地将多个片段添加到片段过渡?

配置更改后片段丢失过渡动画

FragmentTransaction.replace() 淡入过渡显示“幽灵”片段

java 将循环显示和不显示过渡动画添加到Android片段

Vue版本过渡变化