using System; using Cielonos.MainGame.Characters; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.Serialization; namespace Cielonos.MainGame.FunctionalAnimation { [Serializable] public class SetRootMotionMultipliers : FuncAnimPayloadBase { [InfoBox("注意,此Payload参与对RootMotion的修改,和其它修改来源混用时需注意。")] [Tooltip("是否设定倍数,如果不设定,则恢复为默认值1")] public bool isSet; [ShowIf("isSet")] [Tooltip("是否从行为树参数获取突破类型")] public bool getFromBehaviorTree; [FormerlySerializedAs("getMultiplierFromVariableCollection")] [ShowIf("isSet")] [Tooltip("是否从VariableCollection里获取倍数")] public bool getFromVariableCollection; [HideIf("@isSet == false || getFromBehaviorTree == true || getFromVariableCollection == true")] [Tooltip("自定义倍数")] public Vector3 customMultiplier = Vector3.one; public override void Invoke() { Vector3 multiplier = Vector3.one; if (isSet) { if (getFromVariableCollection) { float mx = runtimeFuncAnim.runtimeVariables.GetVariable("RootMotionMoveXMultiplier", 1); float my = runtimeFuncAnim.runtimeVariables.GetVariable("RootMotionMoveZMultiplier", 1); float mz = runtimeFuncAnim.runtimeVariables.GetVariable("RootMotionMoveYMultiplier", 1); multiplier = new Vector3(mx, my, mz); } else if (getFromBehaviorTree) { BehaviorSubcontroller behaviorSc = (character as Automata)!.behaviorSc; Vector3 btMultiplier = behaviorSc.mainBehaviorTree.GetVariable("RootMotionMultiplier").Value; multiplier = btMultiplier; } else { multiplier = customMultiplier; } } character.movementSc.rootMotionMultiplier = multiplier; } } }