diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs index eb42578..5abf5e7 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHand.cs @@ -74,11 +74,15 @@ namespace Passer.Humanoid { #if UNITY_ANDROID && hOCHAND if (tracker.oculusHandTracking) handSkeleton = OculusHandSkeleton.Get(unityXR.transform, handTarget.isLeft); + else #endif #if hVIVEHAND if (tracker.viveHandTracking) handSkeleton = ViveHandSkeleton.Get(unityXR.transform, handTarget.isLeft); + else #endif + handSkeleton = UnityXRHandSkeleton.Get(unityXR.transform, handTarget.isLeft); + } #endregion Init diff --git a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHandSkeleton.cs b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHandSkeleton.cs index 96ab8e4..ef778b6 100644 --- a/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHandSkeleton.cs +++ b/Runtime/HumanoidControl/Scripts/Extensions/UnityXR/UnityXRHandSkeleton.cs @@ -20,6 +20,33 @@ namespace Passer.Tracking { protected XRNode xrNode; + #region Manage + + public static UnityXRHandSkeleton Find(Transform trackerTransform, bool isLeft) { + UnityXRHandSkeleton[] handSkeletons = trackerTransform.GetComponentsInChildren(); + foreach (UnityXRHandSkeleton handSkeleton in handSkeletons) { + if (handSkeleton.isLeft == isLeft) + return handSkeleton; + } + return null; + } + + public static UnityXRHandSkeleton Get(Transform trackerTransform, bool isLeft) { + UnityXRHandSkeleton handSkeleton = Find(trackerTransform, isLeft); + if (handSkeleton == null) { + GameObject skeletonObj = new GameObject(isLeft ? "Left Hand Skeleton" : "Right Hand Skeleton"); + skeletonObj.transform.parent = trackerTransform; + skeletonObj.transform.localPosition = Vector3.zero; + skeletonObj.transform.localRotation = Quaternion.identity; + + handSkeleton = skeletonObj.AddComponent(); + handSkeleton.isLeft = isLeft; + } + return handSkeleton; + } + + #endregion + #region Init protected override void Start() {