Unity中常用的几种相机


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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM