Added FinalIK
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using RootMotion.FinalIK;
|
||||
|
||||
namespace RootMotion.Demos
|
||||
{
|
||||
|
||||
public class VRIKCalibrationBasic : MonoBehaviour
|
||||
{
|
||||
|
||||
[Tooltip("The VRIK component.")] public VRIK ik;
|
||||
|
||||
[Header("Head")]
|
||||
[Tooltip("HMD.")] public Transform centerEyeAnchor;
|
||||
[Tooltip("Position offset of the camera from the head bone (root space).")] public Vector3 headAnchorPositionOffset;
|
||||
[Tooltip("Rotation offset of the camera from the head bone (root space).")] public Vector3 headAnchorRotationOffset;
|
||||
|
||||
[Header("Hands")]
|
||||
[Tooltip("Left Hand Controller")] public Transform leftHandAnchor;
|
||||
[Tooltip("Right Hand Controller")] public Transform rightHandAnchor;
|
||||
[Tooltip("Position offset of the hand controller from the hand bone (controller space).")] public Vector3 handAnchorPositionOffset;
|
||||
[Tooltip("Rotation offset of the hand controller from the hand bone (controller space).")] public Vector3 handAnchorRotationOffset;
|
||||
|
||||
[Header("Scale")]
|
||||
[Tooltip("Multiplies the scale of the root.")] public float scaleMlp = 1f;
|
||||
|
||||
[Header("Data stored by Calibration")]
|
||||
public VRIKCalibrator.CalibrationData data = new VRIKCalibrator.CalibrationData();
|
||||
|
||||
private void LateUpdate()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.C))
|
||||
{
|
||||
// Calibrate the character, store data of the calibration
|
||||
data = VRIKCalibrator.Calibrate(ik, centerEyeAnchor, leftHandAnchor, rightHandAnchor, headAnchorPositionOffset, headAnchorRotationOffset, handAnchorPositionOffset, handAnchorRotationOffset, scaleMlp);
|
||||
}
|
||||
|
||||
/*
|
||||
* calling Calibrate with settings will return a VRIKCalibrator.CalibrationData, which can be used to calibrate that same character again exactly the same in another scene (just pass data instead of settings),
|
||||
* without being dependent on the pose of the player at calibration time.
|
||||
* Calibration data still depends on bone orientations though, so the data is valid only for the character that it was calibrated to or characters with identical bone structures.
|
||||
* If you wish to use more than one character, it would be best to calibrate them all at once and store the CalibrationData for each one.
|
||||
* */
|
||||
if (Input.GetKeyDown(KeyCode.D))
|
||||
{
|
||||
if (data.scale == 0f)
|
||||
{
|
||||
Debug.LogError("No Calibration Data to calibrate to, please calibrate with 'C' first.");
|
||||
}
|
||||
else
|
||||
{
|
||||
VRIKCalibrator.Calibrate(ik, data, centerEyeAnchor, null, leftHandAnchor, rightHandAnchor);
|
||||
}
|
||||
}
|
||||
|
||||
// Recalibrates avatar scale only. Can be called only if the avatar has been calibrated already.
|
||||
if (Input.GetKeyDown(KeyCode.S))
|
||||
{
|
||||
if (data.scale == 0f)
|
||||
{
|
||||
Debug.LogError("Avatar needs to be calibrated before RecalibrateScale is called.");
|
||||
}
|
||||
VRIKCalibrator.RecalibrateScale(ik, data, scaleMlp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user