using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraTrun : MonoBehaviour { // 水平视角移动的敏感度 public float sensitivityHor = 3f; // 垂直视角移动的敏感度 public float sensitivityVer = 3f; // 视角向上移动的角度范围,该值越小范围越大 public float upVer = -40; // 视角向下移动的角度范围,该值越大范围越大 public float downVer = 45; // 垂直旋转角度 private float rotVer; //水平旋转角度 private float rotHor; bool isRot;//APP是否旋转 int CurNum;//当前变化的数值 public static CameraTrun _instance; // 旋转的方向问题 // x 表示绕 x 轴旋转,即 前上后 的角度 // y 表示绕 y 轴旋转,即 左前后 的角度 // y 表示绕 y 轴旋转,即 左前后 的角度 private void Awake() { _instance = this; } // Start is called before the first frame update void Start() { // 初始化当前的垂直角度 rotVer = transform.eulerAngles.x; } // Update is called once per frame void Update() { if (Input.GetMouseButton(1) || isRot) { // 获取鼠标上下的移动位置 float mouseVer = 0; // 获取鼠标左右的移动位置 float mouseHor = 0; if (isRot) { switch (CurNum) { case 1: mouseVer += 0.05f; break; case 2: mouseVer -= 0.05f; break; case 3: mouseHor -= 0.05f; break; case 4: mouseHor += 0.05f; break; } } else { mouseVer = Input.GetAxis("Mouse Y"); mouseHor = Input.GetAxis("Mouse X"); } // 鼠标往上移动,视角其实是往下移,所以要想达到视角也往上移的话,就要减去它 rotVer -= mouseVer * sensitivityVer; // 限定上下移动的视角范围,即垂直方向不能360度旋转 rotVer = Mathf.Clamp(rotVer, upVer, downVer); // 水平移动 float rotHor = transform.localEulerAngles.y + mouseHor * sensitivityHor; // 设置视角的移动值 // transform.localEulerAngles = new Vector3(rotVer, rotHor, 0); // transform.parent.localEulerAngles = new Vector3(rotVer, rotHor, 0); transform.localEulerAngles = new Vector3(transform.localEulerAngles.x - mouseVer * transform.parent.GetComponent().moveSpeed, transform.localEulerAngles.y + mouseHor * transform.parent.GetComponent().moveSpeed, 0); // transform.parent.Translate(transform.up * -rotVer * transform.parent.GetComponent().moveSpeed * 0.1f + transform.right * -rotHor * transform.parent.GetComponent().moveSpeed * 0.1f, Space.World); } } public void ChangeCamera(int num,bool state) { isRot = state; CurNum = num; } }