123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- using GxrSdk;
- using SC.XR.Unity.Module_InputSystem;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.InputSystem;
- using UnityEngine.XR;
- using UnityEngine.XR.OpenXR.Input;
- public class XRInputManager : MonoBehaviour, IGxrControllerPoseHandler, IGxrButtonHandler, IGxrTouchHandler
- {
- public Transform left = null;
- public Transform right = null;
- public InputActionProperty inputEvent;
- public List<InputActionReference> listinput;
- int xy = 8;
- // Start is called before the first frame update
- void Start()
- {
- Invoke("startXR", 1f);
- }
- GameObject RightX3C01Pointer;
- GameObject RightX3C01Controller;
- void startXR()
- {
- Module_InputSystem.instance.SetActiveInputDevice(InputDeviceType.KS, true);
- Module_InputSystem.instance.SetActiveInputDevice(InputDeviceType.Head, false);
- #if UNITY_EDITOR
- Module_InputSystem.instance.SetActiveInputDevice(InputDeviceType.KS, false);
- Module_InputSystem.instance.SetActiveInputDevice(InputDeviceType.Head, true);
- #endif
- left.gameObject.SetActive(false);
- right.gameObject.SetActive(true);
- }
- private void Update()
- {
- if (Input.GetKeyDown(KeyCode.X))
- {
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.X, InputKeyState.DOWN);
- }
- if (Input.GetKeyUp(KeyCode.X))
- {
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.X, InputKeyState.UP);
- }
- }
- private void onDeviceDisConnected(UnityEngine.XR.InputDevice obj)
- {
- if (obj.characteristics.ToString().Contains(InputDeviceCharacteristics.Left.ToString()))
- {
- Debug.Log("Left===>" + obj.isValid);
- left.gameObject.SetActive(obj.isValid);
- }
- if (obj.characteristics.ToString().Contains(InputDeviceCharacteristics.Right.ToString()))
- {
- Debug.Log("Right===>" + obj.isValid);
- right.gameObject.SetActive(obj.isValid);
- }
- }
- private void OnApplicationPause(bool pause)
- {
- if (!pause)
- {
- List<UnityEngine.XR.InputDevice> inputDevices = new List<UnityEngine.XR.InputDevice>();
- InputDevices.GetDevices(inputDevices);
- for (int i = 0; i < inputDevices.Count; i++)
- {
- onDeviceConnected(inputDevices[i]);
- }
- }
- }
- private void onDeviceConnected(UnityEngine.XR.InputDevice obj)
- {
- if (obj.characteristics.ToString().Contains(InputDeviceCharacteristics.Left.ToString()))
- {
- Debug.Log("Left===>" + obj.isValid);
- left.gameObject.SetActive(obj.isValid);
- }
- if (obj.characteristics.ToString().Contains(InputDeviceCharacteristics.Right.ToString()))
- {
- Debug.Log("Right===>" + obj.isValid);
- right.gameObject.SetActive(obj.isValid);
- }
- }
- private void OnCanceledEventL(InputAction.CallbackContext context)
- {
- Debug.Log("OnCanceledEventL" + context.control.name);
- switch (context.control.name)
- {
- case "secondarytouched":
- break;
- case "secondarybutton":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Y, InputKeyState.UP);
- break;
- case "primarytouched":
- break;
- case "primarybutton":
- Debug.Log("InputKeyCode.A===》UP");
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.X, InputKeyState.UP);
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.UP);
- break;
- case "touchpadtouched":
- break;
- case "thumbstickclicked":
- break;
- case "thumbstick":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.JoystickX = xy + (int)(context.ReadValue<Vector2>().x * 10);
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.JoystickY = xy + (int)(context.ReadValue<Vector2>().y * 10);
- break;
- case "grip":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.HallInside = 10 - (int)((context.ReadValue<float>()) * 10f);
- break;
- case "grippressed":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.LHallInside, InputKeyState.UP);
- break;
- case "triggerButton":
- // API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.HallFoward = 10 - (int)((context.ReadValue<float>()) * 10f);
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.UP);
- break;
- case "menu":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.LFunction, InputKeyState.UP);
- break;
- }
- }
- void OnEventL(InputAction.CallbackContext context)
- {
- Debug.Log("OnEventL" + context.control.name);
- switch (context.control.name)
- {
- case "secondarytouched":
- break;
- case "secondarybutton":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Y, InputKeyState.DOWN);
- break;
- case "primarytouched":
- break;
- case "primarybutton":
- Debug.Log("InputKeyCode.A===》DOWN");
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.X, InputKeyState.DOWN);
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.DOWN);
- break;
- case "touchpadtouched":
- break;
- case "thumbstickclicked":
- break;
- case "thumbstick":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.JoystickX = xy + (int)(context.ReadValue<Vector2>().x * 10);
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.JoystickY = xy + (int)(context.ReadValue<Vector2>().y * 10);
- break;
- case "grip":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.HallInside = 10 - (int)((context.ReadValue<float>()) * 10f);
- break;
- case "grippressed":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.LHallInside, InputKeyState.DOWN);
- break;
- case "triggerButton":
- // API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.HallFoward = 10 - (int)((context.ReadValue<float>()) * 10f);
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.DOWN);
- break;
- case "menu":
- API_GSXR_Module_InputSystem_KS.GSXR_KSLeft.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.LFunction, InputKeyState.DOWN);
- break;
- }
- }
- private void OnCanceledEventR(InputAction.CallbackContext context)
- {
- Debug.Log("OnCanceledEventR" + context.control.name);
- switch (context.control.name)
- {
- case "secondarytouched":
- break;
- case "secondarybutton":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.B, InputKeyState.UP);
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.UP);
- break;
- case "primarytouched":
- break;
- case "primarybutton":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.A, InputKeyState.UP);
- break;
- case "touchpadtouched":
- break;
- case "thumbstickclicked":
- break;
- case "thumbstick":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.JoystickX = xy + (int)(context.ReadValue<Vector2>().x * 10);
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.JoystickY = xy + (int)(context.ReadValue<Vector2>().y * 10);
- break;
- case "grip":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.HallInside = 10 - (int)((context.ReadValue<float>()) * 10f);
- break;
- case "grippressed":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.RHallInside, InputKeyState.UP);
- break;
- case "trigger":
- // API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.HallFoward = 10 - (int)((context.ReadValue<float>()) * 10f);
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.UP);
- break;
- case "menu":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.RFunction, InputKeyState.UP);
- break;
- }
- }
- void OnEventR(InputAction.CallbackContext context)
- {
- Debug.Log("OnEventR" + context.control.name);
- switch (context.control.name)
- {
- case "secondarytouched":
- break;
- case "secondarybutton":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.B, InputKeyState.DOWN);
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.DOWN);
- break;
- case "primarytouched":
- break;
- case "primarybutton":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.A, InputKeyState.DOWN);
- break;
- case "touchpadtouched":
- break;
- case "thumbstickclicked":
- break;
- case "thumbstick":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.JoystickX = xy + (int)(context.ReadValue<Vector2>().x * 10);
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.JoystickY = xy + (int)(context.ReadValue<Vector2>().y * 10);
- break;
- case "grip":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.HallInside = 10 - (int)((context.ReadValue<float>()) * 10f);
- break;
- case "grippressed":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.RHallInside, InputKeyState.DOWN);
- break;
- case "xri_right_trigger":
- // API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.HallFoward = 10 - (int)((context.ReadValue<float>()) * 10f);
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.DOWN);
- break;
- case "menu":
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.RFunction, InputKeyState.DOWN);
- break;
- }
- }
- public void OnControllerPoseUpdated(GxrControllerPoseEventData eventData)
- {
- if (right != null)
- {
- right.rotation = eventData.CurrentRotation;
- right.position = new Vector3(OpenXRCamera.Instance.head.transform.position.x, OpenXRCamera.Instance.head.transform.position.y - 0.3f, OpenXRCamera.Instance.head.transform.position.z);
- }
- }
- void OnEnable()
- {
- // 注册控制器姿态监听器
- GxrSystemAccessor.InputSystem?.RegisterHandler<IGxrControllerPoseHandler>(this);
- // 注册按键事件监听器
- GxrSystemAccessor.InputSystem?.RegisterHandler<IGxrButtonHandler>(this);
- // 注册触摸事件监听器
- GxrSystemAccessor.InputSystem?.RegisterHandler<IGxrTouchHandler>(this);
- }
- void OnDisable()
- {
- // 注销控制器姿态监听器
- GxrSystemAccessor.InputSystem?.UnregisterHandler<IGxrControllerPoseHandler>(this);
- // 注销按键事件监听器
- GxrSystemAccessor.InputSystem?.UnregisterHandler<IGxrButtonHandler>(this);
- // 注销触摸事件监听器
- GxrSystemAccessor.InputSystem?.UnregisterHandler<IGxrTouchHandler>(this);
- }
- public void OnButtonDown(GxrButtonEventData eventData)
- {
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.DOWN);
- }
- public void OnButtonUp(GxrButtonEventData eventData)
- {
- API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDataKS.inputKeys.InputDataAddKey(InputKeyCode.Enter, InputKeyState.UP);
- }
- public void OnButtonClick(GxrButtonEventData eventData)
- {
- }
- public void OnButtonLongClick(GxrButtonEventData eventData)
- {
- }
- public void OnButtonDoubleClick(GxrButtonEventData eventData)
- {
- }
- public void OnTouchBegin(GxrTouchEventData eventData)
- {
- }
- public void OnTouchEnd(GxrTouchEventData eventData)
- {
- }
- public void OnTouchSwipe(GxrTouchEventData eventData)
- {
- }
- public void OnTouchPositionUpdated(GxrTouchEventData eventData)
- {
- }
- }
|