예제 #1
0
    public void UpdateTransformsFromPose(IntPtr sdkAvatar)
    {
        if (sdkAvatar != IntPtr.Zero)
        {
            ovrAvatarTransform      bodyTransform   = OvrAvatar.CreateOvrAvatarTransform(CurrentPose.headPosition, CurrentPose.headRotation);
            ovrAvatarHandInputState inputStateLeft  = OvrAvatar.CreateInputState(OvrAvatar.CreateOvrAvatarTransform(CurrentPose.handLeftPosition, CurrentPose.handLeftRotation), CurrentPose.controllerLeftPose);
            ovrAvatarHandInputState inputStateRight = OvrAvatar.CreateInputState(OvrAvatar.CreateOvrAvatarTransform(CurrentPose.handRightPosition, CurrentPose.handRightRotation), CurrentPose.controllerRightPose);

            CAPI.ovrAvatarPose_UpdateBody(sdkAvatar, bodyTransform);
            CAPI.ovrAvatarPose_UpdateHandsWithType(sdkAvatar, inputStateLeft, inputStateRight, ControllerType);
        }
    }
예제 #2
0
 public static ovrAvatarHandInputState CreateInputState(ovrAvatarTransform transform, OvrAvatarDriver.ControllerPose pose)
 {
     ovrAvatarHandInputState inputState = new ovrAvatarHandInputState();
     inputState.transform = transform;
     inputState.buttonMask = pose.buttons;
     inputState.touchMask = pose.touches;
     inputState.joystickX = pose.joystickPosition.x;
     inputState.joystickY = pose.joystickPosition.y;
     inputState.indexTrigger = pose.indexTrigger;
     inputState.handTrigger = pose.handTrigger;
     inputState.isActive = pose.isActive;
     return inputState;
 }
    public override void UpdateTransforms(IntPtr sdkAvatar)
    {
        if (sdkAvatar != IntPtr.Zero)
        {
            PoseFrame pose = GetCurrentPose();

            ovrAvatarTransform      bodyTransform   = OvrAvatar.CreateOvrAvatarTransform(pose.headPosition, pose.headRotation);
            ovrAvatarHandInputState inputStateLeft  = OvrAvatar.CreateInputState(OvrAvatar.CreateOvrAvatarTransform(pose.handLeftPosition, pose.handLeftRotation), pose.controllerLeftPose);
            ovrAvatarHandInputState inputStateRight = OvrAvatar.CreateInputState(OvrAvatar.CreateOvrAvatarTransform(pose.handRightPosition, pose.handRightRotation), pose.controllerRightPose);

            CAPI.ovrAvatarPose_UpdateBody(sdkAvatar, bodyTransform);
            CAPI.ovrAvatarPose_UpdateHands(sdkAvatar, inputStateLeft, inputStateRight);
        }
    }
예제 #4
0
        public static void ovrAvatarPose_UpdateSDK3DofHands(
            IntPtr avatar,
            ovrAvatarHandInputState inputStateLeft,
            ovrAvatarHandInputState inputStateRight,
            ovrAvatarControllerType type)
        {
            System.IntPtr leftPtr  = Marshal.AllocHGlobal(Marshal.SizeOf(inputStateLeft));
            System.IntPtr rightPtr = Marshal.AllocHGlobal(Marshal.SizeOf(inputStateRight));
            Marshal.StructureToPtr(inputStateLeft, leftPtr, false);
            Marshal.StructureToPtr(inputStateRight, rightPtr, false);

            ovrAvatar_SetLeftControllerVisibility(avatar, true);
            ovrAvatar_SetRightControllerVisibility(avatar, true);
            ovrAvatar_SetLeftHandVisibility(avatar, true);
            ovrAvatar_SetRightHandVisibility(avatar, true);
            ovrAvatarPose_Update3DofHands(avatar, leftPtr, rightPtr, type);
        }
예제 #5
0
    protected void UpdateTransformsFromPose(IntPtr sdkAvatar)
    {
        if (sdkAvatar != IntPtr.Zero)
        {
            ovrAvatarTransform      bodyTransform   = OvrAvatar.CreateOvrAvatarTransform(CurrentPose.headPosition, CurrentPose.headRotation);
            ovrAvatarHandInputState inputStateLeft  = OvrAvatar.CreateInputState(OvrAvatar.CreateOvrAvatarTransform(CurrentPose.handLeftPosition, CurrentPose.handLeftRotation), CurrentPose.controllerLeftPose);
            ovrAvatarHandInputState inputStateRight = OvrAvatar.CreateInputState(OvrAvatar.CreateOvrAvatarTransform(CurrentPose.handRightPosition, CurrentPose.handRightRotation), CurrentPose.controllerRightPose);

            CAPI.ovrAvatarPose_UpdateBody(sdkAvatar, bodyTransform);

            if (GetIsTrackedRemote())
            {
                CAPI.ovrAvatarPose_UpdateSDK3DofHands(sdkAvatar, inputStateLeft, inputStateRight, GetRemoteControllerType());
            }
            else
            {
                CAPI.ovrAvatarPose_UpdateHands(sdkAvatar, inputStateLeft, inputStateRight);
            }
        }
    }
예제 #6
0
 public static extern void ovrAvatarPose_UpdateHands(
     IntPtr avatar,
     ovrAvatarHandInputState inputStateLeft,
     ovrAvatarHandInputState inputStateRight);
예제 #7
0
    // Update is called once per frame
    void Update()
    {
        if (Driver != null)
        {
            // Get the current pose from the driver
            OvrAvatarDriver.PoseFrame pose;
            if (Driver.GetCurrentPose(out pose))
            {
                // If we're recording, record the pose
                if (RecordPackets)
                {
                    RecordFrame(Time.deltaTime, pose);
                }

                // Update the various avatar components with this pose
                if (ControllerLeft != null)
                {
                    ControllerLeft.UpdatePose(pose.controllerLeftPose);
                }
                if (ControllerRight != null)
                {
                    ControllerRight.UpdatePose(pose.controllerRightPose);
                }
                if (HandLeft != null)
                {
                    HandLeft.UpdatePose(pose.controllerLeftPose);
                }
                if (HandRight != null)
                {
                    HandRight.UpdatePose(pose.controllerRightPose);
                }
                if (Body != null)
                {
                    Body.UpdatePose(pose.voiceAmplitude);
                }

                if (sdkAvatar != IntPtr.Zero)
                {
                    ovrAvatarTransform      bodyTransform   = CreateOvrAvatarTransform(pose.headPosition, pose.headRotation);
                    ovrAvatarHandInputState inputStateLeft  = CreateInputState(CreateOvrAvatarTransform(pose.handLeftPosition, pose.handLeftRotation), pose.controllerLeftPose);
                    ovrAvatarHandInputState inputStateRight = CreateInputState(CreateOvrAvatarTransform(pose.handRightPosition, pose.handRightRotation), pose.controllerRightPose);

                    foreach (float[] voiceUpdate in voiceUpdates)
                    {
                        Oculus.Avatar.CAPI.ovrAvatarPose_UpdateVoiceVisualization(sdkAvatar, voiceUpdate);
                    }
                    voiceUpdates.Clear();

                    Oculus.Avatar.CAPI.ovrAvatarPose_UpdateBody(sdkAvatar, bodyTransform);
                    Oculus.Avatar.CAPI.ovrAvatarPose_UpdateHands(sdkAvatar, inputStateLeft, inputStateRight);
                    Oculus.Avatar.CAPI.ovrAvatarPose_Finalize(sdkAvatar, Time.deltaTime);
                }
            }
        }
        if (sdkAvatar != IntPtr.Zero && assetLoadingIds.Count == 0)
        {
            //If all of the assets for this avatar have been loaded, update the avatar
            UpdateSDKAvatarUnityState();

            UpdateCustomPoses();

            if (!assetsFinishedLoading)
            {
                AssetsDoneLoading.Invoke();
                assetsFinishedLoading = true;
            }
        }
    }
예제 #8
0
    // Update is called once per frame
    void Update()
    {
        if (Driver != null)
        {
            // Get the current pose from the driver
            OvrAvatarDriver.PoseFrame pose;
            if (Driver.GetCurrentPose(out pose))
            {
                // If we're recording, record the pose
                if (RecordPackets)
                {
                    RecordFrame(Time.deltaTime, pose);
                }

                // Update the various avatar components with this pose
                if (ControllerLeft != null)
                {
                    ControllerLeft.UpdatePose(pose.controllerLeftPose);
                }
                if (ControllerRight != null)
                {
                    ControllerRight.UpdatePose(pose.controllerRightPose);
                }
                if (HandLeft != null)
                {
                    HandLeft.UpdatePose(pose.controllerLeftPose);
                }
                if (HandRight != null)
                {
                    HandRight.UpdatePose(pose.controllerRightPose);
                }
                if (Body != null)
                {
                    Body.UpdatePose(pose.voiceAmplitude);
                }

                if (sdkAvatar != IntPtr.Zero)
                {
                    ovrAvatarTransform      bodyTransform   = CreateOvrAvatarTransform(pose.headPosition, pose.headRotation);
                    ovrAvatarHandInputState inputStateLeft  = CreateInputState(CreateOvrAvatarTransform(pose.handLeftPosition, pose.handLeftRotation), pose.controllerLeftPose);
                    ovrAvatarHandInputState inputStateRight = CreateInputState(CreateOvrAvatarTransform(pose.handRightPosition, pose.handRightRotation), pose.controllerRightPose);

                    foreach (float[] voiceUpdate in voiceUpdates)
                    {
                        CAPI.ovrAvatarPose_UpdateVoiceVisualization(sdkAvatar, voiceUpdate);
                    }
                    voiceUpdates.Clear();

                    CAPI.ovrAvatarPose_UpdateBody(sdkAvatar, bodyTransform);
                    CAPI.ovrAvatarPose_UpdateHands(sdkAvatar, inputStateLeft, inputStateRight);
                    CAPI.ovrAvatarPose_Finalize(sdkAvatar, Time.deltaTime);
                }
            }
        }
        if (sdkAvatar != IntPtr.Zero && assetLoadingIds.Count == 0)
        {
            //If all of the assets for this avatar have been loaded, update the avatar
            UpdateSDKAvatarUnityState();

            UpdateCustomPoses();

            if (!assetsFinishedLoading)
            {
                AssetsDoneLoading.Invoke();
                assetsFinishedLoading = true;
            }
        }

        /*
         * if(leftHandCollider)
         * {
         *  if ((OVRInput.Get(OVRInput.RawAxis1D.LIndexTrigger) > triggerGrabDeadzone || OVRInput.Get(OVRInput.RawAxis1D.LHandTrigger) > triggerGrabDeadzone) && !leftGrabbingObject)
         *  {
         *      //leftHandCollider.enabled = true;
         *      leftHandCollider.isTrigger = false;
         *  }
         *  else
         *  {
         *      leftHandCollider.isTrigger = true;
         *      //leftHandCollider.enabled = false;
         *  }
         * }
         * if (rightHandCollider)
         * {
         *  if ((OVRInput.Get(OVRInput.RawAxis1D.RIndexTrigger) > triggerGrabDeadzone || OVRInput.Get(OVRInput.RawAxis1D.RHandTrigger) > triggerGrabDeadzone) && !rightGrabbingObject)
         *  {
         *      rightHandCollider.isTrigger = false;
         *      //rightHandCollider.enabled = true;
         *
         *  }
         *  else
         *  {
         *      rightHandCollider.isTrigger = true;
         *      //rightHandCollider.enabled = false;
         *  }
         * }
         */
    }