Forum Discussion

🚨 This forum is archived and read-only. To submit a forum post, please visit our new Developer Forum. 🚨
paperli's avatar
paperli
Honored Guest
5 years ago
Solved

Skeleton physical colliders pose not updated during hand tracking

I run the HandsInteractionTrainScene in Quest with Unity, and find that the skeleton physical colliders are not updated with hand tracking pose. I only turn on the Render Physics Capsules and allow Hand Tracking Support in OVRCameraRig. Does anyone know what's going on?
You can see the footage in the attached zip file.
  • I found a fix. Change below lines in OVRSkeleton.cs,
    if (capsuleGO.activeSelf)
    {
    capsule.CapsuleRigidbody.MovePosition(bone.position);
    capsule.CapsuleRigidbody.MovePosition(bone.rotation);
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.position = bone.position;
    capsule.CapsuleRigidbody.rotation = bone.rotation;
    }
    to this:
    if (capsuleGO.activeSelf)
    {
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
    Looks like assigning position and rotation to the rigid body doesn’t work at all.
    Since the OVRSkeleton is the part of sdk, it will be better if Oculus fixes it in its Oculus Integration package.

7 Replies

Replies have been turned off for this discussion
  • I have a better solution, please feel free to try it

    if (capsuleGO.activeSelf)
    {
    capsuleGO.SetActive(false);         //Raymond Tsang debug @ 2020-02-14
        capsuleGO.SetActive(true);          //Raymond Tsang debug @ 2020-02-14
    capsule.CapsuleRigidbody.MovePosition(bone.position);
    capsule.CapsuleRigidbody.MovePosition(bone.rotation);
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }

  • paperli said:

    I found a fix. Change below lines in OVRSkeleton.cs,
    if (capsuleGO.activeSelf)
    {
    capsule.CapsuleRigidbody.MovePosition(bone.position);
    capsule.CapsuleRigidbody.MovePosition(bone.rotation);
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.position = bone.position;
    capsule.CapsuleRigidbody.rotation = bone.rotation;
    }
    to this:
    if (capsuleGO.activeSelf)
    {
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
    Looks like assigning position and rotation to the rigid body doesn’t work at all.
    Since the OVRSkeleton is the part of sdk, it will be better if Oculus fixes it in its Oculus Integration package.


    I have a better solution here, please feel free to try

    if (capsuleGO.activeSelf)
    {
    capsuleGO.SetActive(false);         //Raymond Tsang debug @ 2020-02-14 
        capsuleGO.SetActive(true);          //Raymond Tsang debug @ 2020-02-14       
    capsule.CapsuleRigidbody.MovePosition(bone.position);
    capsule.CapsuleRigidbody.MovePosition(bone.rotation);
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
      
  • Anonymous's avatar
    Anonymous
    This fixes a similar problem I was having, thank you!!

    In my situation I created a spaceship with a control touchscreen console for navigation.  Those buttons would then add a force to the spaceships rigidbody.  This was causing the capsule colliders on the skeleton to move off of the hand.  I've been trying to fix this for awhile.  Thanks again!!
  • paperli's avatar
    paperli
    Honored Guest
    I found a fix. Change below lines in OVRSkeleton.cs,
    if (capsuleGO.activeSelf)
    {
    capsule.CapsuleRigidbody.MovePosition(bone.position);
    capsule.CapsuleRigidbody.MovePosition(bone.rotation);
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.position = bone.position;
    capsule.CapsuleRigidbody.rotation = bone.rotation;
    }
    to this:
    if (capsuleGO.activeSelf)
    {
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
    else
    {
    capsuleGO.SetActive(true);
    capsule.CapsuleRigidbody.gameObject.transform.position = bone.position;
    capsule.CapsuleRigidbody.gameObject.transform.rotation = bone.rotation;
    }
    Looks like assigning position and rotation to the rigid body doesn’t work at all.
    Since the OVRSkeleton is the part of sdk, it will be better if Oculus fixes it in its Oculus Integration package.