BowCamera.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.EventSystems;
  5. public class BowCamera : MonoBehaviour
  6. {
  7. //触摸检测器
  8. JC.Unity.TouchChecker touchChecker = new JC.Unity.TouchChecker();
  9. //触摸模式开关
  10. private static bool _isTouchMode = true;
  11. public static bool isTouchMode
  12. {
  13. get
  14. {
  15. // if (CommonConfig.isReleaseVersion) return false;
  16. return _isTouchMode;
  17. }
  18. set
  19. {
  20. _isTouchMode = value;
  21. }
  22. }
  23. public GameObject GO;
  24. //左右转动范围限制
  25. float[] limitRangeRotateY = { -30, 30 };
  26. //上下转动范围限制
  27. float[] limitRangeRotateX = { -30, 30 };
  28. //本地欧拉角记录值
  29. Vector3 localEulerAngles;
  30. // Start is called before the first frame update
  31. void Start()
  32. {
  33. localEulerAngles = transform.localEulerAngles;
  34. touchChecker.onMoved += delegate (Touch t, bool isOnUI)
  35. {
  36. Debug.Log(isOnUI);
  37. // if (banLogic) return;
  38. if (isOnUI) return;
  39. //触摸控制镜头和拉弓射箭
  40. this.localEulerAngles.x = Mathf.Clamp(this.localEulerAngles.x - t.deltaPosition.y * Time.deltaTime * 5, limitRangeRotateX[0], limitRangeRotateX[1]);
  41. this.localEulerAngles.y = Mathf.Clamp(this.localEulerAngles.y + t.deltaPosition.x * Time.deltaTime * 5, limitRangeRotateY[0], limitRangeRotateY[1]);
  42. this.transform.localEulerAngles = this.localEulerAngles;
  43. };
  44. touchChecker.onEnded += delegate (Touch t, bool isOnUI)
  45. {
  46. // if (banLogic) return;
  47. if (!isOnUI) LauncherCtrl.instance.Shoot();// armBow.ADS_fire();
  48. };
  49. }
  50. private void Update()
  51. {
  52. // CameraAni();
  53. }
  54. public void CameraAni()
  55. {
  56. if (Application.platform == RuntimePlatform.WindowsEditor)
  57. {
  58. //touchChecker.Update();
  59. //鼠标控制镜头和拉弓射箭
  60. this.localEulerAngles.x = Mathf.Clamp(this.localEulerAngles.x - 2f * Input.GetAxis("Mouse Y"), limitRangeRotateX[0], limitRangeRotateX[1]);
  61. this.localEulerAngles.y = Mathf.Clamp(this.localEulerAngles.y + 2f * Input.GetAxis("Mouse X"), limitRangeRotateY[0], limitRangeRotateY[1]);
  62. this.transform.localEulerAngles = this.localEulerAngles;
  63. }
  64. else if (isTouchMode)
  65. {
  66. touchChecker.Update();
  67. }
  68. }
  69. private void OnDrawGizmos()
  70. {
  71. Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 200, Color.green);//绘制射线
  72. Debug.DrawRay(GO.transform.position, transform.TransformDirection(Vector3.forward) * 200, Color.green);//绘制射线
  73. }
  74. public RaycastHit GetRaycastHit()
  75. {
  76. float maxDistance = 100;
  77. int layerMask = 1 << 8; //TargetLayerMask
  78. RaycastHit raycastHit;
  79. Ray ray = new Ray(transform.position, transform.forward); ;
  80. Physics.Raycast(ray.origin, ray.direction, out raycastHit, maxDistance, layerMask);
  81. return raycastHit;
  82. }
  83. }