Unity不一樣遊戲裏,有不一樣的Camera,這裏簡單介紹下。spa
官方標準資源提供了4種Cameracode
CctvCamera
這種相似於電視轉播的攝像機看到的情形,攝像機固定在遠處,經過轉動角度,跟蹤拍攝對象,相似於足球遊戲常會用到的視角。orm
將預製件拖到場景中,位置最好離對象遠點,將對象拖到Target裏,能夠經過調節Field View來控制對象顯示的大小,至關於在調整焦距。
對象
FreeLookCamera
這個是會將對象一直顯示在屏幕中,能夠經過鼠標上下左右移動觀看周圍,和魔獸世界裏面按下鼠標左鍵之後的那個視角同樣。blog
將預製件拖到場景,位置會本身去定,將對象拖到Target裏,能夠經過FreeLookCameraRig的孫子對象的Field View來控制對象顯示的大小,至關於在調整焦距。
遊戲
這個像是一個能夠自動變焦,能夠保持對象顯示大小始終一致的CctvCameraip
將預製件拖到場景,位置會本身去定,將對象拖到Target裏,能夠經過Zoom Amount Multiplier來調整最初的焦距。資源
Unity的第一人稱視角是和控制和在一塊兒的一個預製件,直接拖到場景中就能夠用了。get
以上是Unity標準資源裏的,下面再介紹幾個其餘的it
這個能夠理解爲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 }
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 }
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 }