Unity3d--第三人稱攝像機常用控制


 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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM