// Update is called once per frame void Update() { #if UNITY_ANDROID //&& !UNITY_EDITOR if (!NxrViewer.Instance.IsWinPlatform && !isGamePad) { // Android/NOLO int noloType = GetNoloType(); int handType = noloType == (int)CDevice.NOLO_TYPE.LEFT ? (int)InteractionManager.NACTION_HAND_TYPE.HAND_LEFT : (int)InteractionManager.NACTION_HAND_TYPE.HAND_RIGHT; bool isConnected = false; if (InteractionManager.IsInteractionSDKEnabled()) { isConnected = InteractionManager.IsSixDofControllerConnected(handType); } else { isConnected = ControllerAndroid.isDeviceConn(noloType); } if (DebugInEditor) { isConnected = true; } if (_currentStates.connectStatus == 0 && isConnected) { NxrViewer.Instance.SwitchControllerMode(true); _currentStates.connectStatus = 1; NxrPlayerCtrl mNxrPlayerCtrl = NxrPlayerCtrl.Instance; if (mNxrPlayerCtrl != null) { // 关闭3dof手柄显示 mNxrPlayerCtrl.GamepadEnabled = false; // 关闭白点显示 } } else if (_currentStates.connectStatus == 1 && !isConnected) { _currentStates.connectStatus = 0; } //Debug.Log("status="+_currentStates.connectStatus + ", " + deviceType.ToString() + "," // + ControllerAndroid.isDeviceConn((int) CDevice.NOLO_TYPE.LEFT) + ", " + ControllerAndroid.isDeviceConn((int)CDevice.NOLO_TYPE.RIGHT)); if (!IsConneted() && controllerModel != null && controllerModel.gameObject.activeSelf) { if (controllerPower != null) { controllerPower.gameObject.SetActive(false); } controllerModel.gameObject.SetActive(false); laserPointer.holder.SetActive(false); NxrControllerHelper.ControllerRaycastObject = null; Debug.Log("controllerModel Dismiss " + deviceType + "," + controllerModel.gameObject.activeSelf); } else if (IsConneted() && controllerModel != null && !controllerModel.gameObject.activeSelf) { if (controllerPower != null) { controllerPower.gameObject.SetActive(true); } controllerModel.gameObject.SetActive(true); laserPointer.holder.SetActive(true); Debug.Log("controllerModel Show " + deviceType); } if (GetButtonUp(ButtonID.InternalTrigger)) { NxrSDKApi.Instance.SixDofControllerPrimaryDeviceType = deviceType; Debug.Log("IsPrimaryControllerHand " + deviceType.ToString()); } if (laserPointer != null && controllerModel != null) { if (NxrSDKApi.Instance.SixDofControllerPrimaryDeviceType != deviceType) { // 非主手柄,隐藏射线 laserPointer.holder.SetActive(false); } else { laserPointer.holder.SetActive(controllerModel.gameObject.activeSelf); } } if (IsConneted()) { processControllerKeyEvent(noloType); float[] poseData = new float[8]; if (InteractionManager.IsSixDofControllerConnected(handType)) { float[] pose = InteractionManager.GetControllerPose((InteractionManager.NACTION_HAND_TYPE)handType); poseData[1] = pose[4]; poseData[2] = pose[5]; poseData[3] = pose[6]; for (int i = 0; i < 4; i++) { poseData[4 + i] = pose[i]; } } else { poseData = ControllerAndroid.getCPoseEvent(noloType, 1); } if (NxrViewer.Instance.SixDofMode == SixDofMode.Head_3Dof_Ctrl_6Dof) { Vector3 HeadPosition = NxrSDKApi.Instance.HeadPosition; // Debug.LogError(noloType + ".NOLO Controller Y: " + poseData[2] + "/HeadY=" + HeadPosition.y); poseData[1] = poseData[1] - HeadPosition.x; poseData[2] = poseData[2] - HeadPosition.y; poseData[3] = poseData[3] - HeadPosition.z; } else if (NxrViewer.Instance.SixDofMode == SixDofMode.Head_3Dof_Ctrl_3Dof) { var factor = handType == (int)InteractionManager.NACTION_HAND_TYPE.HAND_LEFT ? -1 : 1; var headPos = NxrViewer.Instance.GetHead().transform.localPosition; var pos = new Vector3(headPos.x + 0.25f * factor, headPos.y - 0.6f, headPos.z + 0.5f); poseData[1] = pos.x; poseData[2] = pos.y; poseData[3] = pos.z; } transform.localPosition = new Vector3(poseData[1], poseData[2], poseData[3]); transform.localRotation = new Quaternion(poseData[4], poseData[5], poseData[6], poseData[7]); } } #endif #if UNITY_STANDALONE_WIN if (NxrInstantNativeApi.Inited) { _prevStates = _currentStates; _currentStates = NxrInstantNativeApi.GetControllerStates(deviceType); if (isGamePad) { // 3dof手柄左右手模式切换 if (!IsConneted()) { _currentStates = NxrInstantNativeApi.GetControllerStates(NxrInstantNativeApi.NibiruDeviceType.LeftController); if (!IsConneted()) { deviceType = NxrInstantNativeApi.NibiruDeviceType.RightController; } else { NxrControllerHelper.HandMode3DOF = NxrControllerHelper.LEFT_HAND_MODE; deviceType = NxrInstantNativeApi.NibiruDeviceType.LeftController; Debug.Log("Current 3dof HandMode is Left !!!"); } } } if (!IsConneted() && controllerModel != null && controllerModel.gameObject.activeSelf) { controllerModel.gameObject.SetActive(false); laserPointer.holder.SetActive(false); if (deviceType == NxrInstantNativeApi.NibiruDeviceType.LeftController) { NxrControllerHelper.IsLeftNoloControllerConnected = false; } else if (deviceType == NxrInstantNativeApi.NibiruDeviceType.RightController) { NxrControllerHelper.IsRightNoloControllerConnected = false; } Debug.Log("controllerModel Dismiss " + deviceType + "," + controllerModel.gameObject.activeSelf); } else if (IsConneted() && controllerModel != null && !controllerModel.gameObject.activeSelf) { controllerModel.gameObject.SetActive(true); laserPointer.holder.SetActive(true); if (NxrControllerHelper.ControllerType == (int)NxrInstantNativeApi.NibiruControllerId.NOLO) { if (deviceType == NxrInstantNativeApi.NibiruDeviceType.LeftController) { NxrControllerHelper.IsLeftNoloControllerConnected = true; } else if (deviceType == NxrInstantNativeApi.NibiruDeviceType.RightController) { NxrControllerHelper.IsRightNoloControllerConnected = true; } } Debug.Log("controllerModel Show " + deviceType); } else if (!IsConneted() && isGamePad && NxrControllerHelper.Is3DofControllerConnected) { NxrControllerHelper.Is3DofControllerConnected = false; Debug.Log("Controller 3dof Dismiss."); } else if (IsConneted() && isGamePad && !NxrControllerHelper.Is3DofControllerConnected) { if (NxrControllerHelper.ControllerType == (int)NxrInstantNativeApi.NibiruControllerId.NORMAL_3DOF) { NxrControllerHelper.Is3DofControllerConnected = true; } Debug.Log("Controller 3dof Show." + NxrControllerHelper.ControllerType); } if (!isGamePad) { NxrInstantNativeApi.Nibiru_Pose pose = NxrInstantNativeApi.GetPoseByDeviceType(deviceType); // NOLO 非3DOF transform.localPosition = pose.position; transform.localRotation = new Quaternion(pose.rotation.x, pose.rotation.y, pose.rotation.z, pose.rotation.w); } } #endif }
//------------------------------------------------- void Update() { _prevStates_hmd = _currentStates_hmd; #if UNITY_STANDALONE_WIN || ANDROID_REMOTE_NRR _currentStates_hmd = NxrInstantNativeApi.GetControllerStates(NxrInstantNativeApi.HoloeverDeviceType.Hmd); #endif if (GetHMDButtonDown(NxrTrackedDevice.ButtonID.DPadCenter)) { NxrViewer.Instance.Triggered = true; onDpadCenterDown.Invoke(); } if (GetHMDButtonUp(NxrTrackedDevice.ButtonID.DPadCenter)) { onDpadCenterUp.Invoke(); } if (GetHMDButtonDown(NxrTrackedDevice.ButtonID.DPadUp)) { onDpadUpDown.Invoke(); } if (GetHMDButtonUp(NxrTrackedDevice.ButtonID.DPadUp)) { onDpadUpLifted.Invoke(); } if (GetHMDButtonDown(NxrTrackedDevice.ButtonID.DPadDown)) { onDpadDownPressed.Invoke(); } if (GetHMDButtonUp(NxrTrackedDevice.ButtonID.DPadDown)) { onDpadDownUp.Invoke(); } if (GetHMDButtonDown(NxrTrackedDevice.ButtonID.DPadLeft)) { onDpadLeftDown.Invoke(); } if (GetHMDButtonUp(NxrTrackedDevice.ButtonID.DPadLeft)) { onDpadLeftUp.Invoke(); } if (GetHMDButtonDown(NxrTrackedDevice.ButtonID.DPadRight)) { onDpadRightDown.Invoke(); } if (GetHMDButtonUp(NxrTrackedDevice.ButtonID.DPadRight)) { onDpadRightUp.Invoke(); } if (nvrTrackedDevices != null) { foreach (NxrTrackedDevice device in nvrTrackedDevices) { if (device.GetButtonDown(NxrTrackedDevice.ButtonID.TouchPad)) { if (!device.isGamePad) { NxrViewer.Instance.Triggered = true; } onTouchpadDown.Invoke(device.deviceType); } if (device.GetButtonUp(NxrTrackedDevice.ButtonID.TouchPad)) { onTouchpadUp.Invoke(device.deviceType); } if (device.GetButtonDown(NxrTrackedDevice.ButtonID.System)) { onSystemDown.Invoke(device.deviceType); } if (device.GetButtonUp(NxrTrackedDevice.ButtonID.System)) { onSystemUp.Invoke(device.deviceType); } if (device.GetButtonDown(NxrTrackedDevice.ButtonID.Menu)) { onMenuDown.Invoke(device.deviceType); } if (device.GetButtonUp(NxrTrackedDevice.ButtonID.Menu)) { onMenuUp.Invoke(device.deviceType); } if (device.GetButtonDown(NxrTrackedDevice.ButtonID.Grip)) { onGripDown.Invoke(device.deviceType); } if (device.GetButtonUp(NxrTrackedDevice.ButtonID.Grip)) { onGripUp.Invoke(device.deviceType); } if (device.GetButtonDown(NxrTrackedDevice.ButtonID.Trigger)) { onTriggerDown.Invoke(device.deviceType); } if (device.GetButtonUp(NxrTrackedDevice.ButtonID.Trigger)) { onTriggerUp.Invoke(device.deviceType); } if (device.GetTouchDown(NxrTrackedDevice.ButtonID.TrackpadTouch)) { onTouchpadTouch.Invoke(device.deviceType); } if (device.GetTouchUp(NxrTrackedDevice.ButtonID.TrackpadTouch)) { onTouchpadRelease.Invoke(device.deviceType); } Vector2 position = device.GetTouchPosition(); if (position.x != 0 || position.y != 0) { onTouchPosition.Invoke(device.deviceType, position.x, position.y); } } } }