Files
2026-03-04 10:03:45 +08:00

53 lines
1.1 KiB
C#

using System;
using UnityEngine;
namespace RootMotion.FinalIK
{
[Serializable]
public class ConstraintRotationOffset : Constraint
{
public Quaternion offset;
private Quaternion defaultRotation;
private Quaternion defaultLocalRotation;
private Quaternion lastLocalRotation;
private Quaternion defaultTargetLocalRotation;
private bool initiated;
private bool rotationChanged => transform.localRotation != lastLocalRotation;
public override void UpdateConstraint()
{
if (!(weight <= 0f) && base.isValid)
{
if (!initiated)
{
defaultLocalRotation = transform.localRotation;
lastLocalRotation = transform.localRotation;
initiated = true;
}
if (rotationChanged)
{
defaultLocalRotation = transform.localRotation;
}
transform.localRotation = defaultLocalRotation;
transform.rotation = Quaternion.Slerp(transform.rotation, offset, weight);
lastLocalRotation = transform.localRotation;
}
}
public ConstraintRotationOffset()
{
}
public ConstraintRotationOffset(Transform transform)
{
base.transform = transform;
}
}
}