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文件夹下

posted @ 2018-03-12 11:27  盘子脸  阅读(...)  评论(... 编辑 收藏