MoveChange.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using SC.XR.Unity.Module_InputSystem;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. public class MoveChange : MonoBehaviour
  5. {
  6. private GameObject mesh_test => SceneIOCContainer.Instance.Pull("mesh_test") as GameObject;
  7. private Transform ARSpaceForAll=>(SceneIOCContainer.Instance.Pull("ARSpaceForAll")as GameObject).transform;
  8. [SerializeField] private Toggle RotToggle;
  9. private bool isDown;
  10. private float y=> mesh_test.transform.position.y;
  11. void Start()
  12. {
  13. DispatcherBase.KeyDownDelegateRegister(keyDownEventDelegate);
  14. DispatcherBase.KeyUpDelegateRegister(keyUpEventDelegate);
  15. RotToggle.onValueChanged.AddListener(RotToggleOnValueChanged);
  16. IsRot = RotToggle.isOn;
  17. }
  18. private void keyUpEventDelegate(InputKeyCode keyCode, InputDevicePartBase part)
  19. {
  20. if (keyCode != InputKeyCode.Enter || goRefrence==null)
  21. {
  22. return;
  23. }
  24. Debug.Log("keyDownEventDelegate===>" + keyCode);
  25. mesh_test.transform.parent = ARSpaceForAll;
  26. goRefrence.transform.parent = ARSpaceForAll;
  27. isDown = false;
  28. }
  29. private void keyDownEventDelegate(InputKeyCode keyCode, InputDevicePartBase part)
  30. {
  31. if(keyCode != InputKeyCode.Enter)
  32. {
  33. return;
  34. }
  35. if (!SetSceneActive.Instance.active|| goRefrence==null)
  36. return;
  37. if(!IsRot)
  38. {
  39. TempVector3 = OpenXRCamera.Instance.head.position-goRefrence.transform.position;
  40. mesh_test.transform.parent = goRefrence.transform;
  41. }
  42. else
  43. {
  44. TempVector3 = OpenXRCamera.Instance.head.eulerAngles-goRefrence.transform.eulerAngles;
  45. mesh_test.transform.parent = goRefrence.transform;
  46. }
  47. /*
  48. Debug.Log("keyUpEventDelegate===>" + keyCode);
  49. #if UNITY_EDITOR
  50. //moveGame.transform.parent = OpenXRCamera.Instance.head;
  51. #else
  52. switch (DeviceType.type)
  53. {
  54. case "Nreal":
  55. moveGame.transform.parent = API_GSXR_Module_InputSystem_KS.GSXR_KSRight.transform;// OpenXRCamera.Instance.head;
  56. break;
  57. case "A01":
  58. moveGame.transform.parent = OpenXRCamera.Instance.head;
  59. break;
  60. case "Phone":
  61. moveGame.transform.parent = OpenXRCamera.Instance.head;
  62. break;
  63. case "Rhinox":
  64. moveGame.transform.parent = API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDeviceKSPartUI.transform;
  65. break;
  66. default:
  67. moveGame.transform.parent = API_GSXR_Module_InputSystem_KS.GSXR_KSRight.transform;// OpenXRCamera.Instance.head;
  68. break;
  69. }
  70. #endif
  71. */
  72. isDown = true;
  73. }
  74. void Update()
  75. {
  76. if (isDown && SetSceneActive.Instance.active)
  77. {
  78. if(!IsRot)
  79. {
  80. goRefrence.transform.position = OpenXRCamera.Instance.head.position - TempVector3;
  81. goRefrence.transform.position = new Vector3(goRefrence.transform.position.x, y, goRefrence.transform.position.z);
  82. }
  83. else
  84. {
  85. goRefrence.transform.eulerAngles = OpenXRCamera.Instance.head.eulerAngles - TempVector3;
  86. goRefrence.transform.eulerAngles = new Vector3(0, goRefrence.transform.eulerAngles.y, 0);
  87. }
  88. //moveGame.transform.eulerAngles = new Vector3(0, moveGame.transform.eulerAngles.y, 0);
  89. }
  90. }
  91. private bool IsRot;
  92. private Vector3 TempVector3;
  93. private Vector3 headPos;
  94. public GameObject goRefrence // 参照物
  95. {
  96. get =>SceneIOCContainer.Instance.Pull("goRefrence")as GameObject;
  97. }
  98. private void RotToggleOnValueChanged(bool isOn)
  99. {
  100. if (isOn)
  101. {
  102. IsRot = true;
  103. }
  104. else
  105. {
  106. IsRot = false;
  107. }
  108. }
  109. }