private void BuildRenderComponents() { ovrAvatarBaseComponent baseComponnet = new ovrAvatarBaseComponent(); ovrAvatarHandComponent leftHandComponnet = new ovrAvatarHandComponent(); ovrAvatarHandComponent rightHandComponnet = new ovrAvatarHandComponent(); ovrAvatarControllerComponent leftControllerComponent = new ovrAvatarControllerComponent(); ovrAvatarControllerComponent rightControllerComponent = new ovrAvatarControllerComponent(); ovrAvatarBodyComponent bodyComponent = new ovrAvatarBodyComponent(); ovrAvatarComponent dummyComponent = new ovrAvatarComponent(); const bool FetchName = true; if (CAPI.ovrAvatarPose_GetLeftHandComponent(sdkAvatar, ref leftHandComponnet)) { CAPI.ovrAvatarComponent_Get(leftHandComponnet.renderComponent, FetchName, ref dummyComponent); AddAvatarComponent(ref HandLeft, dummyComponent); HandLeft.isLeftHand = true; } if (CAPI.ovrAvatarPose_GetRightHandComponent(sdkAvatar, ref rightHandComponnet)) { CAPI.ovrAvatarComponent_Get(rightHandComponnet.renderComponent, FetchName, ref dummyComponent); AddAvatarComponent(ref HandRight, dummyComponent); HandRight.isLeftHand = false; } if (CAPI.ovrAvatarPose_GetBodyComponent(sdkAvatar, ref bodyComponent)) { CAPI.ovrAvatarComponent_Get(bodyComponent.renderComponent, FetchName, ref dummyComponent); AddAvatarComponent(ref Body, dummyComponent); } if (CAPI.ovrAvatarPose_GetLeftControllerComponent(sdkAvatar, ref leftControllerComponent)) { CAPI.ovrAvatarComponent_Get(leftControllerComponent.renderComponent, FetchName, ref dummyComponent); AddAvatarComponent(ref ControllerLeft, dummyComponent); ControllerLeft.isLeftHand = true; } if (CAPI.ovrAvatarPose_GetRightControllerComponent(sdkAvatar, ref rightControllerComponent)) { CAPI.ovrAvatarComponent_Get(rightControllerComponent.renderComponent, FetchName, ref dummyComponent); AddAvatarComponent(ref ControllerRight, dummyComponent); ControllerRight.isLeftHand = false; } if (CAPI.ovrAvatarPose_GetBaseComponent(sdkAvatar, ref baseComponnet)) { CAPI.ovrAvatarComponent_Get(baseComponnet.renderComponent, FetchName, ref dummyComponent); AddAvatarComponent(ref Base, dummyComponent); } }
private void UpdateSDKAvatarUnityState() { #if VIU_OCULUSVR_1_37_0_OR_NEWER && VIU_OCULUSVR_AVATAR ovrAvatarControllerComponent controllerComponent = new ovrAvatarControllerComponent(); ovrAvatarComponent dummyComponent = new ovrAvatarComponent(); OvrAvatarTouchController controller = null; if (m_deviceIndex == LEFT_INDEX) { if (CAPI.ovrAvatarPose_GetLeftControllerComponent(sdkAvatar, ref controllerComponent)) { CAPI.ovrAvatarComponent_Get(controllerComponent.renderComponent, true, ref dummyComponent); AddAvatarComponent(ref controller, dummyComponent); controller.isLeftHand = true; } } else if (m_deviceIndex == RIGHT_INDEX) { if (CAPI.ovrAvatarPose_GetRightControllerComponent(sdkAvatar, ref controllerComponent)) { CAPI.ovrAvatarComponent_Get(controllerComponent.renderComponent, true, ref dummyComponent); AddAvatarComponent(ref controller, dummyComponent); controller.isLeftHand = false; } } #elif (VIU_OCULUSVR_1_32_0_OR_NEWER || VIU_OCULUSVR_1_36_0_OR_NEWER) && VIU_OCULUSVR_AVATAR //Iterate through all the render components UInt32 componentCount = CAPI.ovrAvatarComponent_Count(sdkAvatar); for (UInt32 i = 0; i < componentCount; i++) { IntPtr ptr = CAPI.ovrAvatarComponent_Get_Native(sdkAvatar, i); ovrAvatarComponent component = (ovrAvatarComponent)Marshal.PtrToStructure(ptr, typeof(ovrAvatarComponent)); if (!trackedComponents.ContainsKey(component.name)) { GameObject componentObject = null; Type specificType = null; if (specificType == null && (ovrAvatarCapabilities.All & ovrAvatarCapabilities.Hands) != 0) { if (m_deviceIndex == LEFT_INDEX) { ovrAvatarControllerComponent?controllerComponent = CAPI.ovrAvatarPose_GetLeftControllerComponent(sdkAvatar); if (specificType == null && controllerComponent.HasValue && ptr == controllerComponent.Value.renderComponent) { specificType = typeof(OvrAvatarTouchController); if (ovrController != null) { componentObject = ovrController.gameObject; } } } else if (m_deviceIndex == RIGHT_INDEX) { ovrAvatarControllerComponent?controllerComponent = CAPI.ovrAvatarPose_GetRightControllerComponent(sdkAvatar); if (specificType == null && controllerComponent.HasValue && ptr == controllerComponent.Value.renderComponent) { specificType = typeof(OvrAvatarTouchController); if (ovrController != null) { componentObject = ovrController.gameObject; } } } } if (componentObject != null) { AddAvatarComponent(componentObject, component); } } UpdateAvatarComponent(component); } #endif }
private void Update() { if (m_updateDynamically) { #if (VIU_OCULUSVR_1_32_0_OR_NEWER || VIU_OCULUSVR_1_36_0_OR_NEWER || VIU_OCULUSVR_1_37_0_OR_NEWER) && VIU_OCULUSVR_AVATAR if (sdkAvatar == IntPtr.Zero) { return; } if (m_deviceIndex == LEFT_INDEX) { inputStateLeft.transform.position = transform.position; inputStateLeft.transform.orientation = transform.rotation; inputStateLeft.transform.scale = transform.localScale; inputStateLeft.buttonMask = 0; inputStateLeft.touchMask = ovrAvatarTouch.Pointing | ovrAvatarTouch.ThumbUp; if (ViveInput.GetPress(HandRole.LeftHand, ControllerButton.AKey)) { inputStateLeft.buttonMask |= ovrAvatarButton.One; } if (ViveInput.GetPress(HandRole.LeftHand, ControllerButton.BKey)) { inputStateLeft.buttonMask |= ovrAvatarButton.Two; } if (ViveInput.GetPress(HandRole.LeftHand, ControllerButton.System)) { inputStateLeft.buttonMask |= ovrAvatarButton.Three; } if (ViveInput.GetPress(HandRole.LeftHand, ControllerButton.Pad)) { inputStateLeft.buttonMask |= ovrAvatarButton.Joystick; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.AKeyTouch)) { inputStateLeft.touchMask &= ~ovrAvatarTouch.ThumbUp; inputStateLeft.touchMask |= ovrAvatarTouch.One; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.BkeyTouch)) { inputStateLeft.touchMask &= ~ovrAvatarTouch.ThumbUp; inputStateLeft.touchMask |= ovrAvatarTouch.Two; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.PadTouch)) { inputStateLeft.touchMask &= ~ovrAvatarTouch.ThumbUp; inputStateLeft.touchMask |= ovrAvatarTouch.Joystick; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.TriggerTouch)) { inputStateLeft.touchMask &= ~ovrAvatarTouch.Pointing; inputStateLeft.touchMask |= ovrAvatarTouch.Index; } inputStateLeft.joystickX = ViveInput.GetAxis(HandRole.LeftHand, ControllerAxis.JoystickX); inputStateLeft.joystickY = ViveInput.GetAxis(HandRole.LeftHand, ControllerAxis.JoystickY); inputStateLeft.indexTrigger = ViveInput.GetAxis(HandRole.LeftHand, ControllerAxis.Trigger); inputStateLeft.handTrigger = ViveInput.GetAxis(HandRole.LeftHand, ControllerAxis.CapSenseGrip); inputStateLeft.isActive = true; } else if (m_deviceIndex == RIGHT_INDEX) { inputStateRight.transform.position = transform.position; inputStateRight.transform.orientation = transform.rotation; inputStateRight.transform.scale = transform.localScale; inputStateRight.buttonMask = 0; inputStateRight.touchMask = ovrAvatarTouch.Pointing | ovrAvatarTouch.ThumbUp; if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.AKey)) { inputStateRight.buttonMask |= ovrAvatarButton.One; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.BKey)) { inputStateRight.buttonMask |= ovrAvatarButton.Two; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.Pad)) { inputStateRight.buttonMask |= ovrAvatarButton.Joystick; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.AKeyTouch)) { inputStateRight.touchMask &= ~ovrAvatarTouch.ThumbUp; inputStateRight.touchMask |= ovrAvatarTouch.One; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.BkeyTouch)) { inputStateRight.touchMask &= ~ovrAvatarTouch.ThumbUp; inputStateRight.touchMask |= ovrAvatarTouch.Two; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.PadTouch)) { inputStateRight.touchMask &= ~ovrAvatarTouch.ThumbUp; inputStateRight.touchMask |= ovrAvatarTouch.Joystick; } if (ViveInput.GetPress(HandRole.RightHand, ControllerButton.TriggerTouch)) { inputStateRight.touchMask &= ~ovrAvatarTouch.Pointing; inputStateRight.touchMask |= ovrAvatarTouch.Index; } inputStateRight.joystickX = ViveInput.GetAxis(HandRole.RightHand, ControllerAxis.JoystickX); inputStateRight.joystickY = ViveInput.GetAxis(HandRole.RightHand, ControllerAxis.JoystickY); inputStateRight.indexTrigger = ViveInput.GetAxis(HandRole.RightHand, ControllerAxis.Trigger); inputStateRight.handTrigger = ViveInput.GetAxis(HandRole.RightHand, ControllerAxis.CapSenseGrip); inputStateRight.isActive = true; } CAPI.ovrAvatarPose_UpdateHandsWithType(sdkAvatar, inputStateLeft, inputStateRight, m_controllerType); CAPI.ovrAvatarPose_Finalize(sdkAvatar, Time.deltaTime); #endif UpdateComponents(); #if VIU_OCULUSVR_1_37_0_OR_NEWER && VIU_OCULUSVR_AVATAR if (m_deviceIndex == LEFT_INDEX) { ovrAvatarControllerComponent component = new ovrAvatarControllerComponent(); if (CAPI.ovrAvatarPose_GetLeftControllerComponent(sdkAvatar, ref component)) { UpdateAvatarComponent(component.renderComponent); } } else if (m_deviceIndex == RIGHT_INDEX) { ovrAvatarControllerComponent component = new ovrAvatarControllerComponent(); if (CAPI.ovrAvatarPose_GetRightControllerComponent(sdkAvatar, ref component)) { UpdateAvatarComponent(component.renderComponent); } } #endif } }