rabidus-test/Assets/BNG Framework/Scripts/Helpers/VRIFGrabpointUpdater.cs

68 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BNG {
/// <summary>
/// This component is meant to help you autmatically update your grab points, as the default hand model positions have changed since VRIF v1.7
/// </summary>
public class VRIFGrabpointUpdater : MonoBehaviour {
[Header("Right Hand Model")]
[Tooltip("This is the local position of the hand model that was defined in your previous xr rig, as well as what was used in the previewer.")]
public Vector3 PriorModelOffsetRightPosition = new Vector3(-0.024f, 0.051f, 0.001f);
[Tooltip("This is the local position of the NEW hand model that is currently defined in your xr rig, as well as what is used in the previewer.")]
public Vector3 NewModelOffsetRightPosition = new Vector3(-0.006f, 0, -0.04f);
[Tooltip("This is the local rotation of the hand model that was defined in your previous xr rig, as well as what was used in the previewer.")]
public Vector3 PriorModelOffsetRightRotation = new Vector3(-12.041f, 13f, -90f);
[Tooltip("This is the local rotation of the NEW hand model that is currently defined in your xr rig, as well as what is used in the previewer.")]
public Vector3 NewModelOffsetRightRotation = new Vector3(-6, 0.43f, -90f);
[Header("Left Hand Model")]
[Tooltip("This is the local position of the hand model that was defined in your previous xr rig, as well as what was used in the previewer.")]
public Vector3 PriorModelOffsetLeftPosition = new Vector3(0.024f, 0.051f, 0.001f);
[Tooltip("This is the local position of the NEW hand model that is currently defined in your xr rig, as well as what is used in the previewer.")]
public Vector3 NewModelOffsetLeftPosition = new Vector3(0.006f, 0, -0.04f);
[Tooltip("This is the local rotation of the hand model that was defined in your previous xr rig, as well as what was used in the previewer.")]
public Vector3 PriorModelOffsetLeftRotation = new Vector3(-12.041f, -13f, 90f);
[Tooltip("This is the local rotation of the NEW hand model that is currently defined in your xr rig, as well as what is used in the previewer.")]
public Vector3 NewModelOffsetLeftRotation = new Vector3(-6, -0.43f, 90);
void Start() {
ApplyGrabPointUpdate();
}
public void ApplyGrabPointUpdate() {
GrabPoint[] points = GetComponentsInChildren<GrabPoint>();
foreach(var gp in points) {
// Both Hands - use Right Offset for both
if (gp.RightHandIsValid && gp.LeftHandIsValid) {
gp.transform.localPosition = gp.transform.localPosition + (PriorModelOffsetRightPosition - NewModelOffsetRightPosition);
gp.transform.localRotation *= Quaternion.Euler(PriorModelOffsetRightRotation) * Quaternion.Inverse(Quaternion.Euler(NewModelOffsetRightRotation));
}
// Right Hand only
else if (gp.RightHandIsValid) {
gp.transform.localPosition = gp.transform.localPosition + (PriorModelOffsetRightPosition - NewModelOffsetRightPosition);
gp.transform.localRotation *= Quaternion.Euler(PriorModelOffsetRightRotation) * Quaternion.Inverse(Quaternion.Euler(NewModelOffsetRightRotation));
}
// Left Hand only
else if(gp.LeftHandIsValid) {
gp.transform.localPosition = gp.transform.localPosition + (PriorModelOffsetLeftPosition - NewModelOffsetLeftPosition);
gp.transform.localRotation *= Quaternion.Euler(PriorModelOffsetLeftRotation) * Quaternion.Inverse(Quaternion.Euler(NewModelOffsetLeftRotation));
}
}
}
}
}