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 }