Replace UltimateXR with HurricaneVR

This commit is contained in:
2024-08-08 17:01:07 +02:00
parent e8658374d6
commit fb21dbbb73
5932 changed files with 358362 additions and 2174150 deletions

View File

@@ -0,0 +1,104 @@
#if HVR_OCULUS
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
namespace HurricaneVR.Framework.Oculus
{
public class HVROculusHandAnimator : MonoBehaviour
{
public UnityEvent HandTrackingEnabled = new UnityEvent();
public UnityEvent HandTrackingDisabled = new UnityEvent();
public OVRSkeleton Skeleton;
public OVRSkeleton.BoneId HandBoneId = OVRSkeleton.BoneId.Hand_Start;
public Vector3 HandRotationOffset;
public Vector3 HandPositionOffset;
public Transform OffsetTarget;
public List<HVROculusBone> Bones = new List<HVROculusBone>();
private HVROculusBone[] _boneMap;
private Vector3 _targetOriginalPosition;
private Quaternion _targetOriginalRotation;
private bool _previousIsHandTracking;
private void Start()
{
_boneMap = new HVROculusBone[(int)OVRSkeleton.BoneId.Max];
foreach (var bone in Bones)
{
var index = (int)bone.OVRSkeletonBoneId;
if (_boneMap[index] != null)
{
Debug.LogWarning($"{bone.OVRSkeletonBoneId} has already been mapped!");
}
_boneMap[index] = bone;
}
if (OffsetTarget)
{
_targetOriginalPosition = OffsetTarget.localPosition;
_targetOriginalRotation = OffsetTarget.localRotation;
}
}
private void LateUpdate()
{
if (Skeleton && Skeleton.IsInitialized && Skeleton.IsDataValid)
{
if (!_previousIsHandTracking)
{
HandTrackingEnabled.Invoke();
_previousIsHandTracking = true;
}
if (OffsetTarget)
{
OffsetTarget.localRotation = Quaternion.Euler(HandRotationOffset);
OffsetTarget.localPosition = HandPositionOffset;
}
for (int i = 0; i < Skeleton.Bones.Count; i++)
{
var ovrBone = Skeleton.Bones[i];
var index = (int)ovrBone.Id;
var bone = _boneMap[index];
//unity seems to fill my null array slots with empty objects?
if (bone != null && bone.Transform)
{
bone.Transform.localRotation = bone.RotationOffset * ovrBone.Transform.localRotation;
}
}
}
else
{
if (_previousIsHandTracking)
{
HandTrackingDisabled.Invoke();
_previousIsHandTracking = false;
}
if (OffsetTarget)
{
OffsetTarget.localRotation = _targetOriginalRotation;
OffsetTarget.localPosition = _targetOriginalPosition;
}
}
}
}
[Serializable]
public class HVROculusBone
{
public OVRSkeleton.BoneId OVRSkeletonBoneId;
public Transform Transform;
public Vector3 RotationOffsetEuler;
public Quaternion RotationOffset => Quaternion.Euler(RotationOffsetEuler);
}
}
#endif