You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RootMotion.FinalIK;
namespace RootMotion.FinalIK
{
/// <summary>
/// Bend goal object for FABRIK. Add this to a GameObject you wish FABRIK to bend towards.
/// </summary>
public class FABRIKBendGoal : MonoBehaviour
{
public FABRIK ik;
[Range(0f, 1f)] public float weight = 1f;
private void Start()
{
ik.solver.OnPreIteration += OnPreIteration;
}
void OnPreIteration(int it)
{
if (it != 0) return;
if (weight <= 0f) return;
Vector3 bendDirection = transform.position - ik.solver.bones[0].transform.position;
bendDirection *= weight;
foreach (IKSolverFABRIK.Bone bone in ik.solver.bones)
{
bone.solverPosition += bendDirection;
}
}
private void OnDestroy()
{
if (ik != null) ik.solver.OnPreIteration -= OnPreIteration;
}
}
}