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 }