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 }