MoveChange.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using Immersal.AR;
  2. using SC.XR.Unity.Module_InputSystem;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class MoveChange : MonoBehaviour
  6. {
  7. public Transform ControllerTracker; // 手柄
  8. private GameObject mesh_test => SceneIOCContainer.Instance.Pull("mesh_test") as GameObject;
  9. private Transform ARSpaceForAll=>(SceneIOCContainer.Instance.Pull("ARSpaceForAll")as GameObject).transform;
  10. [SerializeField] private Toggle RotToggle;
  11. private bool isDown;
  12. private float y=> SetSceneActive.Instance.goReference_y;
  13. void Start()
  14. {
  15. DispatcherBase.KeyDownDelegateRegister(keyDownEventDelegate);
  16. DispatcherBase.KeyUpDelegateRegister(keyUpEventDelegate);
  17. RotToggle.onValueChanged.AddListener(RotToggleOnValueChanged);
  18. IsRot = RotToggle.isOn;
  19. }
  20. private void keyUpEventDelegate(InputKeyCode keyCode, InputDevicePartBase part)
  21. {
  22. if (keyCode != InputKeyCode.Enter || goRefrence==null)
  23. {
  24. return;
  25. }
  26. Debug.Log("keyDownEventDelegate===>" + keyCode);
  27. mesh_test.transform.parent = ARSpaceForAll;
  28. goRefrence.transform.parent = ARSpaceForAll;
  29. isDown = false;
  30. }
  31. private void keyDownEventDelegate(InputKeyCode keyCode, InputDevicePartBase part)
  32. {
  33. if(keyCode != InputKeyCode.Enter)
  34. {
  35. return;
  36. }
  37. if (!SetSceneActive.Instance.active|| goRefrence==null)
  38. return;
  39. if(!IsRot)
  40. {
  41. TempVector3 = OpenXRCamera.Instance.head.position-goRefrence.transform.position;
  42. }
  43. mesh_test.transform.parent = goRefrence.transform;
  44. /*
  45. Debug.Log("keyUpEventDelegate===>" + keyCode);
  46. #if UNITY_EDITOR
  47. //moveGame.transform.parent = OpenXRCamera.Instance.head;
  48. #else
  49. switch (DeviceType.type)
  50. {
  51. case "Nreal":
  52. moveGame.transform.parent = API_GSXR_Module_InputSystem_KS.GSXR_KSRight.transform;// OpenXRCamera.Instance.head;
  53. break;
  54. case "A01":
  55. moveGame.transform.parent = OpenXRCamera.Instance.head;
  56. break;
  57. case "Phone":
  58. moveGame.transform.parent = OpenXRCamera.Instance.head;
  59. break;
  60. case "Rhinox":
  61. moveGame.transform.parent = API_GSXR_Module_InputSystem_KS.GSXR_KSRight.inputDeviceKSPartUI.transform;
  62. break;
  63. default:
  64. moveGame.transform.parent = API_GSXR_Module_InputSystem_KS.GSXR_KSRight.transform;// OpenXRCamera.Instance.head;
  65. break;
  66. }
  67. #endif
  68. */
  69. isDown = true;
  70. }
  71. bool isCx;
  72. void Update()
  73. {
  74. if (ARSpace.isFind)
  75. {
  76. if (!isCx)
  77. {
  78. txtTip.SetActive(true);
  79. txtTip.GetComponent<ShowTipTime>().TimeFloat = 3;
  80. txtTip.GetComponent<ShowTipTime>().t = 0;
  81. txtTip.GetComponentInChildren<Text>().text = "空间定位成功";
  82. }
  83. isCx = true;
  84. }
  85. else
  86. {
  87. txtTip.SetActive(true);
  88. txtTip.GetComponentInChildren<Text>().text = "请扫描周围环境以进行空间定位";
  89. }
  90. if (isDown && SetSceneActive.Instance.active)
  91. {
  92. if(!IsRot)
  93. {
  94. goRefrence.transform.position = OpenXRCamera.Instance.head.position - TempVector3;
  95. goRefrence.transform.position = new Vector3(goRefrence.transform.position.x, y, goRefrence.transform.position.z);
  96. }
  97. else
  98. {
  99. v3.y = ControllerTracker_Y - ControllerTracker.localEulerAngles.y;
  100. goRefrence.transform.localEulerAngles +=v3;
  101. ControllerTracker_Y = ControllerTracker.localEulerAngles.y;
  102. /*
  103. goRefrence.transform.localEulerAngles = ControllerTracker.localEulerAngles - TempVector3;
  104. goRefrence.transform.localEulerAngles = new Vector3(0, goRefrence.transform.localEulerAngles.y, 0);
  105. */
  106. }
  107. //moveGame.transform.eulerAngles = new Vector3(0, moveGame.transform.eulerAngles.y, 0);
  108. }
  109. if (Input.GetKeyDown(KeyCode.I))
  110. {
  111. ARSpace.isFind = true;
  112. }
  113. ControllerTracker_Y = ControllerTracker.localEulerAngles.y;
  114. }
  115. private Vector3 v3 = Vector3.zero; // 用于存放手柄上次与下次的差值
  116. private float ControllerTracker_Y = 0; // 上次手柄的旋转Y值
  117. private bool IsRot;
  118. private Vector3 TempVector3;
  119. public GameObject goRefrence // 参照物
  120. {
  121. get =>SceneIOCContainer.Instance.Pull("goRefrence")as GameObject;
  122. }
  123. public GameObject txtTip;
  124. private void RotToggleOnValueChanged(bool isOn)
  125. {
  126. Debug.Log("选择了RotToggleOnValueChanged");
  127. txtTip.SetActive(true);
  128. if (isOn)
  129. {
  130. txtTip.GetComponentInChildren<Text>().text = "如需调整场景旋转角度,请按住手柄拖动场景\n场景将以锚点为圆心进行旋转";
  131. IsRot = true;
  132. }
  133. else
  134. {
  135. txtTip.GetComponentInChildren<Text>().text = "如需移动场景,请按住手柄拖动场景并走动\n场景将跟随您的脚步进行整体移动";
  136. IsRot = false;
  137. }
  138. }
  139. }