Unity中經常使用的幾種相機

Unity不一樣遊戲裏,有不一樣的Camera,這裏簡單介紹下。spa

 

官方標準資源提供了4種Cameracode

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

將預製件拖到場景中,位置最好離對象遠點,將對象拖到Target裏,能夠經過調節Field View來控制對象顯示的大小,至關於在調整焦距。
對象

 

FreeLookCamera
這個是會將對象一直顯示在屏幕中,能夠經過鼠標上下左右移動觀看周圍,和魔獸世界裏面按下鼠標左鍵之後的那個視角同樣。blog

將預製件拖到場景,位置會本身去定,將對象拖到Target裏,能夠經過FreeLookCameraRig的孫子對象的Field View來控制對象顯示的大小,至關於在調整焦距。
遊戲

 

HandHeldCamera

這個像是一個能夠自動變焦,能夠保持對象顯示大小始終一致的CctvCameraip

將預製件拖到場景,位置會本身去定,將對象拖到Target裏,能夠經過Zoom Amount Multiplier來調整最初的焦距。資源

 

第一人稱視角

Unity的第一人稱視角是和控制和在一塊兒的一個預製件,直接拖到場景中就能夠用了。get

 

以上是Unity標準資源裏的,下面再介紹幾個其餘的it

 

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 }
相關文章
相關標籤/搜索