Added FinalIK

This commit is contained in:
2026-08-12 16:46:38 +03:00
parent 487e0d72ff
commit 1dc80339d4
1124 changed files with 768831 additions and 139 deletions
@@ -0,0 +1,42 @@
using UnityEngine;
using System.Collections;
using RootMotion.FinalIK;
namespace RootMotion.Demos {
/// <summary>
/// Holding hands rig.
/// </summary>
public class HoldingHands : MonoBehaviour {
public FullBodyBipedIK rightHandChar, leftHandChar; // The characters
public Transform rightHandTarget, leftHandTarget; // IK targets for the hands
public float crossFade; // Which character is dominating?
public float speed = 10f; // Speed of smoothly lerping the hands target
private Quaternion rightHandRotation, leftHandRotation;
void Start() {
// Find the rotations of the hands target (this gameobject) in the rotation spaces of the hand bones
rightHandRotation = Quaternion.Inverse(rightHandChar.solver.rightHandEffector.bone.rotation) * transform.rotation;
leftHandRotation = Quaternion.Inverse(leftHandChar.solver.leftHandEffector.bone.rotation) * transform.rotation;
}
void LateUpdate () {
// Positioning the hands target
Vector3 targetPosition = Vector3.Lerp(rightHandChar.solver.rightHandEffector.bone.position, leftHandChar.solver.leftHandEffector.bone.position, crossFade);
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * speed);
// Rotating the hands target
transform.rotation = Quaternion.Slerp(rightHandChar.solver.rightHandEffector.bone.rotation * rightHandRotation, leftHandChar.solver.leftHandEffector.bone.rotation * leftHandRotation, crossFade);
// Set effector positions and rotations
rightHandChar.solver.rightHandEffector.position = rightHandTarget.position;
rightHandChar.solver.rightHandEffector.rotation = rightHandTarget.rotation;
leftHandChar.solver.leftHandEffector.position = leftHandTarget.position;
leftHandChar.solver.leftHandEffector.rotation = leftHandTarget.rotation;
}
}
}