56 lines
1.2 KiB
C#
56 lines
1.2 KiB
C#
using UnityEngine;
|
|
|
|
namespace RootMotion.FinalIK
|
|
{
|
|
public class BodyTilt : OffsetModifier
|
|
{
|
|
[Tooltip("Speed of tilting")]
|
|
public float tiltSpeed = 6f;
|
|
|
|
[Tooltip("Sensitivity of tilting")]
|
|
public float tiltSensitivity = 0.07f;
|
|
|
|
[Tooltip("The OffsetPose components")]
|
|
public OffsetPose poseLeft;
|
|
|
|
[Tooltip("The OffsetPose components")]
|
|
public OffsetPose poseRight;
|
|
|
|
private float tiltAngle;
|
|
|
|
private Vector3 lastForward;
|
|
|
|
protected override void Start()
|
|
{
|
|
base.Start();
|
|
lastForward = base.transform.forward;
|
|
}
|
|
|
|
protected override void OnModifyOffset()
|
|
{
|
|
Quaternion quaternion = Quaternion.FromToRotation(lastForward, base.transform.forward);
|
|
float angle = 0f;
|
|
Vector3 axis = Vector3.zero;
|
|
quaternion.ToAngleAxis(out angle, out axis);
|
|
if (axis.y > 0f)
|
|
{
|
|
angle = 0f - angle;
|
|
}
|
|
angle *= tiltSensitivity * 0.01f;
|
|
angle /= base.deltaTime;
|
|
angle = Mathf.Clamp(angle, -1f, 1f);
|
|
tiltAngle = Mathf.Lerp(tiltAngle, angle, base.deltaTime * tiltSpeed);
|
|
float num = Mathf.Abs(tiltAngle) / 1f;
|
|
if (tiltAngle < 0f)
|
|
{
|
|
poseRight.Apply(ik.solver, num);
|
|
}
|
|
else
|
|
{
|
|
poseLeft.Apply(ik.solver, num);
|
|
}
|
|
lastForward = base.transform.forward;
|
|
}
|
|
}
|
|
}
|