1 using UnityEngine; 2 using System.Collections; 3 /* 4 * 第三人称摄像机常用控制 5 */ 6 public class CameraCS : MonoBehaviour { 7 8 private Transform player; 9 private Vector3 offsetPosition; 10 private float distance; 11 private float scrollSpeed = 10; //鼠标滚轮速度 12 private bool isRotating; //开启摄像机旋转 13 private float rotateSpeed = 2; //摄像机旋转速度 14 // Use this for initialization 15 16 void Awake(){ 17 player = GameObject.FindGameObjectWithTag ("Player").transform; 18 } 19 20 void Start () { 21 //摄像机朝向player 22 transform.LookAt (player.position); 23 //获取摄像机与player的位置偏移 24 offsetPosition = transform.position - player.position; 25 } 26 27 // Update is called once per frame 28 void Update () { 29 //摄像机跟随player与player保持相对位置偏移 30 transform.position = offsetPosition + player.position; 31 //摄像机的旋转 32 RotateView (); 33 //摄像机的摄影控制 34 ScrollView (); 35 } 36 37 void ScrollView(){ 38 //返回位置偏移的向量长度 39 distance = offsetPosition.magnitude; 40 41 //根据鼠标滚轮的前后移动获取变化长度 42 distance -= Input.GetAxis ("Mouse ScrollWheel") * scrollSpeed; 43 44 //限制变化长度的范围在最小为4最大为22之间 45 distance = Mathf.Clamp (distance,4,22); 46 47 //新的偏移值为偏移值的单位向量*变换长度 48 offsetPosition = offsetPosition.normalized * distance; 49 50 //打印变化长度 51 Debug.Log (distance); 52 } 53 54 void RotateView(){ 55 //获取鼠标在水平方向的滑动 56 Debug.Log(Input.GetAxis ("Mouse X")); 57 //获取鼠标在垂直方向的滑动 58 Debug.Log(Input.GetAxis("Mouse Y")); 59 60 //按下鼠标右键开启旋转摄像机 61 if (Input.GetMouseButtonDown(1)) { 62 isRotating = true; 63 } 64 65 //抬起鼠标右键关闭旋转摄像机 66 if (Input.GetMouseButtonUp(1)) { 67 isRotating = false; 68 } 69 70 if (isRotating) { 71 72 //获取摄像机初始位置 73 Vector3 pos = transform.position; 74 //获取摄像机初始角度 75 Quaternion rot = transform.rotation; 76 77 //摄像机围绕player的位置延player的Y轴旋转,旋转的速度为鼠标水平滑动的速度 78 transform.RotateAround(player.position,player.up,Input.GetAxis("Mouse X") * rotateSpeed); 79 80 //摄像机围绕player的位置延自身的X轴旋转,旋转的速度为鼠标垂直滑动的速度 81 transform.RotateAround (player.position, transform.right, Input.GetAxis ("Mouse Y") * rotateSpeed); 82 83 //获取摄像机x轴向的欧拉角 84 float x = transform.eulerAngles.x; 85 86 //如果摄像机的x轴旋转角度超出范围,恢复初始位置和角度 87 if (x<10 || x>80) { 88 transform.position = pos; 89 transform.rotation = rot; 90 } 91 } 92 93 //更新摄像机与player的位置偏移 94 offsetPosition = transform.position - player.position; 95 } 96 }