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 }
相关文章
相关标签/搜索