Unity中常用的幾種相機


Unity不同游戲里,有不同的Camera,這里簡單介紹下。

 

官方標准資源提供了4種Camera

CctvCamera
這種類似於電視轉播的攝像機看到的情形,攝像機固定在遠處,通過轉動角度,跟蹤拍攝對象,類似於足球游戲常會用到的視角。

將預制件拖到場景中,位置最好離對象遠點,將對象拖到Target里,可以通過調節Field View來控制對象顯示的大小,相當於在調整焦距。

 

FreeLookCamera
這個是會將對象一直顯示在屏幕中,可以通過鼠標上下左右移動觀看周圍,和魔獸世界里面按下鼠標左鍵以后的那個視角一樣。

將預制件拖到場景,位置會自己去定,將對象拖到Target里,可以通過FreeLookCameraRig的孫子對象的Field View來控制對象顯示的大小,相當於在調整焦距。

 

HandHeldCamera

這個像是一個可以自動變焦,可以保持對象顯示大小始終一致的CctvCamera

將預制件拖到場景,位置會自己去定,將對象拖到Target里,可以通過Zoom Amount Multiplier來調整最初的焦距。

 

第一人稱視角

Unity的第一人稱視角是和控制和在一起的一個預制件,直接拖到場景中就可以用了。

 

以上是Unity標准資源里的,下面再介紹幾個其他的

 

LookAtCamera

這個可以理解為CctvCamera的簡化版,代碼如下

把腳本拖到Camera上,然后設置target對象即可。

 1 using UnityEngine;
 2  
 3 public class LookAtCamera : MonoBehaviour
 4 {
 5  
 6     public GameObject target;
 7  
 8     void LateUpdate ()
 9     {
10         transform.LookAt (target.transform);
11     }
12 }

DungeonCamera

Camera和對象的距離和角度始終保持不變,類似於暗黑破壞神的視角

把腳本拖到Camera上,然后設置target對象即可。

 1 using UnityEngine;
 2  
 3  
 4 public class DungeonCamera : MonoBehaviour
 5 {
 6  
 7     public GameObject target;
 8     public float damping = 5;
 9     Vector3 offset;
10  
11     void Start() {
12         offset = transform.position - target.transform.position;
13     }
14  
15     void LateUpdate() {
16         if (damping > 0) {
17             Vector3 desiredPosition = target.transform.position + offset;
18             Vector3 position = Vector3.Lerp (transform.position, desiredPosition, Time.deltaTime * damping);
19             transform.position = position;
20  
21             transform.LookAt (target.transform.position);
22         } else {
23             Vector3 desiredPosition = target.transform.position + offset;
24             transform.position = desiredPosition;
25         }
26     }
27 }

 

FollowCamera

Camera始終在對象后方的同時,Camera的正前方始終和對象的正前方保持一致,隨對象旋轉而旋轉。類似神廟逃亡的視角,或者是魔獸世界默認的視角。

把腳本拖到Camera上,然后設置target對象即可。

 1 using UnityEngine;
 2  
 3 public class FollowCamera : MonoBehaviour {
 4  
 5     public GameObject target;
 6     public float damping = 1;
 7     Vector3 offset;
 8  
 9     void Start(){
10         offset = target.transform.position - transform.position;
11     }
12  
13  
14     void LateUpdate(){
15         if (damping > 0) {
16             float currentAngle = transform.eulerAngles.y;
17             float desiredAngle = target.transform.eulerAngles.y;
18             float angle = Mathf.LerpAngle (currentAngle, desiredAngle, Time.deltaTime * damping);
19  
20             Quaternion rotation = Quaternion.Euler (0, angle, 0);
21             transform.position = target.transform.position - (rotation * offset);
22  
23             transform.LookAt (target.transform);
24         }else{
25         float desireAngle = target.transform.eulerAngles.y;
26         Quaternion rotation = Quaternion.Euler (0, desireAngle, 0);
27         transform.position = target.transform.position - (rotation * offset);
28         transform.LookAt (target.transform);
29         }
30     }
31 }

 


免責聲明!

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



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