Files
Cielonos/Assets/Scripts/MainGame/Base/FunctionalAnimation/Payloads/SetRootAdsorptionAdjustment.cs

53 lines
1.8 KiB
C#
Raw Normal View History

2025-11-25 08:19:33 -05:00
using Cielonos.MainGame.Characters;
using Sirenix.OdinInspector;
using SLSUtilities.FunctionalAnimation;
using UnityEngine;
namespace Cielonos.MainGame.FunctionalAnimation
{
public class SetRootAdsorptionAdjustment : FuncAnimPayloadBase<bool>
{
[InfoBox("这个payload只能在运行时由代码调用不能直接放在动画事件里使用")]
private CharacterBase executor => runtimeFuncAnim.executor;
private CharacterBase target;
private float enableMinDistance;
public SetRootAdsorptionAdjustment(CharacterBase target, float enableMinDistance)
{
this.eventName = "SetRootAdsorptionAdjustment";
this.target = target;
this.enableMinDistance = enableMinDistance;
}
public override bool Invoke()
{
return Adsorption();
}
bool Adsorption()
{
Vector3 centerPointPosition = executor.flexibleCenterPoint.position;
Vector3 adsorptionVector;
/*if (target.collisionController.mainCollider.enabled)
{
adsorptionVector = target.collisionController.mainCollider.ClosestPoint(centerPointPosition) - centerPointPosition;
}
else*/
{
adsorptionVector = target.flexibleCenterPoint.position - centerPointPosition;
adsorptionVector *= (adsorptionVector.magnitude - (enableMinDistance * 0.5f)) / adsorptionVector.magnitude;
}
adsorptionVector.y = 0;
if (adsorptionVector.magnitude <= enableMinDistance)
{
executor.animationSc.isDisablingMoveXZ = true;
return true; //已经在攻击范围内
}
return false; //在攻击范围之外RootMotion生效
}
}
}