using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class BowCamera : MonoBehaviour { //触摸检测器 JC.Unity.TouchChecker touchChecker = new JC.Unity.TouchChecker(); //触摸模式开关 private static bool _isTouchMode = true; public static bool isTouchMode { get { // if (CommonConfig.isReleaseVersion) return false; return _isTouchMode; } set { _isTouchMode = value; } } public GameObject GO; //左右转动范围限制 float[] limitRangeRotateY = { -30, 30 }; //上下转动范围限制 float[] limitRangeRotateX = { -30, 30 }; //本地欧拉角记录值 Vector3 localEulerAngles; // Start is called before the first frame update void Start() { localEulerAngles = transform.localEulerAngles; touchChecker.onMoved += delegate (Touch t, bool isOnUI) { Debug.Log(isOnUI); // if (banLogic) return; if (isOnUI) return; //触摸控制镜头和拉弓射箭 this.localEulerAngles.x = Mathf.Clamp(this.localEulerAngles.x - t.deltaPosition.y * Time.deltaTime * 5, limitRangeRotateX[0], limitRangeRotateX[1]); this.localEulerAngles.y = Mathf.Clamp(this.localEulerAngles.y + t.deltaPosition.x * Time.deltaTime * 5, limitRangeRotateY[0], limitRangeRotateY[1]); this.transform.localEulerAngles = this.localEulerAngles; }; touchChecker.onEnded += delegate (Touch t, bool isOnUI) { // if (banLogic) return; if (!isOnUI) LauncherCtrl.instance.Shoot();// armBow.ADS_fire(); }; } private void Update() { // CameraAni(); } public void CameraAni() { if (Application.platform == RuntimePlatform.WindowsEditor) { //touchChecker.Update(); //鼠标控制镜头和拉弓射箭 this.localEulerAngles.x = Mathf.Clamp(this.localEulerAngles.x - 2f * Input.GetAxis("Mouse Y"), limitRangeRotateX[0], limitRangeRotateX[1]); this.localEulerAngles.y = Mathf.Clamp(this.localEulerAngles.y + 2f * Input.GetAxis("Mouse X"), limitRangeRotateY[0], limitRangeRotateY[1]); this.transform.localEulerAngles = this.localEulerAngles; } else if (isTouchMode) { touchChecker.Update(); } } private void OnDrawGizmos() { Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 200, Color.green);//绘制射线 Debug.DrawRay(GO.transform.position, transform.TransformDirection(Vector3.forward) * 200, Color.green);//绘制射线 } public RaycastHit GetRaycastHit() { float maxDistance = 100; int layerMask = 1 << 8; //TargetLayerMask RaycastHit raycastHit; Ray ray = new Ray(transform.position, transform.forward); ; Physics.Raycast(ray.origin, ray.direction, out raycastHit, maxDistance, layerMask); return raycastHit; } }