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

45 lines
1.6 KiB
C#

using RootMotion.FinalIK;
using UnityEngine;
namespace RootMotion.Demos
{
public class EffectorOffset : OffsetModifier
{
[Range(0f, 1f)]
public float handsMaintainRelativePositionWeight;
public Vector3 bodyOffset;
public Vector3 leftShoulderOffset;
public Vector3 rightShoulderOffset;
public Vector3 leftThighOffset;
public Vector3 rightThighOffset;
public Vector3 leftHandOffset;
public Vector3 rightHandOffset;
public Vector3 leftFootOffset;
public Vector3 rightFootOffset;
protected override void OnModifyOffset()
{
ik.solver.leftHandEffector.maintainRelativePositionWeight = handsMaintainRelativePositionWeight;
ik.solver.rightHandEffector.maintainRelativePositionWeight = handsMaintainRelativePositionWeight;
ik.solver.bodyEffector.positionOffset += base.transform.rotation * bodyOffset * weight;
ik.solver.leftShoulderEffector.positionOffset += base.transform.rotation * leftShoulderOffset * weight;
ik.solver.rightShoulderEffector.positionOffset += base.transform.rotation * rightShoulderOffset * weight;
ik.solver.leftThighEffector.positionOffset += base.transform.rotation * leftThighOffset * weight;
ik.solver.rightThighEffector.positionOffset += base.transform.rotation * rightThighOffset * weight;
ik.solver.leftHandEffector.positionOffset += base.transform.rotation * leftHandOffset * weight;
ik.solver.rightHandEffector.positionOffset += base.transform.rotation * rightHandOffset * weight;
ik.solver.leftFootEffector.positionOffset += base.transform.rotation * leftFootOffset * weight;
ik.solver.rightFootEffector.positionOffset += base.transform.rotation * rightFootOffset * weight;
}
}
}