PlayMoveWayController.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.SceneManagement;
  5. using VRTK;
  6. namespace ProcedureBYQ
  7. {
  8. /// <summary>
  9. /// 移动控制器
  10. /// </summary>
  11. public class PlayMoveWayController : MonoBehaviour
  12. {
  13. private float _minSpeed = -1f;
  14. private float _maxSpeed = 3;
  15. public LayerMask notMoveLayer;
  16. public Transform _cameraEye;
  17. public Transform maxPoint;
  18. public Transform minPoint;
  19. private float xMax;
  20. private float xMin;
  21. private float yMax;
  22. private float yMin;
  23. private float zMax;
  24. private float zMin;
  25. private void Start()
  26. {
  27. SetLimit();
  28. }
  29. void Update()
  30. {
  31. GameObject rightHand = VRTK_DeviceFinder.GetControllerRightHand();
  32. VRTK_ControllerReference rightHandReference = VRTK_ControllerReference.GetControllerReference(rightHand);
  33. if (VRTK_SDK_Bridge.GetControllerButtonState(SDK_BaseController.ButtonTypes.Touchpad, SDK_BaseController.ButtonPressTypes.Press, rightHandReference))
  34. {
  35. Vector2 axis = VRTK_SDK_Bridge.GetControllerAxis(SDK_BaseController.ButtonTypes.Touchpad, rightHandReference);
  36. Vector3 moveDir = rightHand.transform.forward * axis.y * _maxSpeed;
  37. Ray ray;
  38. if (axis.y > 0) ray = new Ray(_cameraEye.transform.position, rightHand.transform.forward);
  39. else ray = new Ray(_cameraEye.transform.position, -rightHand.transform.forward);
  40. //射线检测,移动方向遇到遮罩区以外碰撞器,不移动
  41. if (Physics.Raycast(ray, 0.3f, notMoveLayer.value)) return;
  42. this.transform.Translate(moveDir * Time.deltaTime, Space.World);
  43. LimitMove();
  44. }
  45. }
  46. private void LimitMove()
  47. {
  48. transform.position = new Vector3(Mathf.Clamp(transform.position.x, xMin, xMax), Mathf.Clamp(transform.position.y, yMin, yMax), Mathf.Clamp(transform.position.z, zMin, zMax));
  49. }
  50. private void SetLimit()
  51. {
  52. SetCameraPosLimite(minPoint.position.x, maxPoint.position.x, minPoint.position.y, maxPoint.position.y, minPoint.position.z, maxPoint.position.z);
  53. }
  54. private void SetCameraPosLimite(float _xMin, float _xMax, float _yMin, float _yMax, float _zMin, float _zMax)
  55. {
  56. xMax = _xMax; xMin = _xMin;
  57. yMax = _yMax; yMin = _yMin;
  58. zMax = _zMax; zMin = _zMin;
  59. }
  60. }
  61. }