Unity不同游戲里懂昂,有不同的Camera寺谤,這里簡單介紹下隙畜。
官方標準資源提供了4種Camera
CctvCamera
這種類似于電視轉播的攝像機看到的情形榛搔,攝像機固定在遠處,通過轉動角度东揣,跟蹤拍攝對象践惑,類似于足球游戲常會用到的視角。
將預制件拖到場景中嘶卧,位置最好離對象遠點尔觉,將對象拖到Target里,可以通過調節(jié)Field View來控制對象顯示的大小芥吟,相當于在調整焦距侦铜。
FreeLookCamera
這個是會將對象一直顯示在屏幕中,可以通過鼠標上下左右移動觀看周圍钟鸵,和魔獸世界里面按下鼠標左鍵以后的那個視角一樣钉稍。
將預制件拖到場景,位置會自己去定棺耍,將對象拖到Target里贡未,可以通過FreeLookCameraRig的孫子對象的Field View來控制對象顯示的大小,相當于在調整焦距蒙袍。
HandHeldCamera
這個像是一個可以自動變焦俊卤,可以保持對象顯示大小始終一致的CctvCamera
將預制件拖到場景,位置會自己去定害幅,將對象拖到Target里消恍,可以通過Zoom Amount Multiplier來調整最初的焦距。
第一人稱視角
Unity的第一人稱視角是和控制和在一起的一個預制件以现,直接拖到場景中就可以用了狠怨。
以上是Unity標準資源里的约啊,下面再介紹幾個其他的
LookAtCamera
這個可以理解為CctvCamera的簡化版,代碼如下
把腳本拖到Camera上取董,然后設置target對象即可棍苹。
using UnityEngine;
public class LookAtCamera : MonoBehaviour
{
publicGameObject target;
voidLateUpdate ()
{
transform.LookAt(target.transform);
}
}
DungeonCamera
Camera和對象的距離和角度始終保持不變,類似于暗黑破壞神的視角
把腳本拖到Camera上茵汰,然后設置target對象即可枢里。
using UnityEngine;
public class DungeonCamera : MonoBehaviour
{
publicGameObject target;
publicfloat damping = 5;
Vector3offset;
voidStart() {
offset= transform.position - target.transform.position;
}
voidLateUpdate() {
if(damping > 0) {
Vector3desiredPosition = target.transform.position + offset;
Vector3position = Vector3.Lerp (transform.position, desiredPosition, Time.deltaTime *damping);
transform.position= position;
transform.LookAt(target.transform.position);
}else {
Vector3desiredPosition = target.transform.position + offset;
transform.position= desiredPosition;
}
}
}
FollowCamera
Camera始終在對象后方的同時,Camera的正前方始終和對象的正前方保持一致蹂午,隨對象旋轉而旋轉栏豺。類似神廟逃亡的視角,或者是魔獸世界默認的視角豆胸。
把腳本拖到Camera上奥洼,然后設置target對象即可。
using UnityEngine;
public class FollowCamera : MonoBehaviour {
publicGameObject target;
publicfloat damping = 1;
Vector3offset;
voidStart(){
offset= target.transform.position - transform.position;
}
voidLateUpdate(){
if(damping > 0) {
floatcurrentAngle = transform.eulerAngles.y;
floatdesiredAngle = target.transform.eulerAngles.y;
floatangle = Mathf.LerpAngle (currentAngle, desiredAngle, Time.deltaTime * damping);
Quaternionrotation = Quaternion.Euler (0, angle, 0);
transform.position= target.transform.position - (rotation * offset);
transform.LookAt(target.transform);
}else{
floatdesireAngle = target.transform.eulerAngles.y;
Quaternionrotation = Quaternion.Euler (0, desireAngle, 0);
transform.position= target.transform.position - (rotation * offset);
transform.LookAt(target.transform);
}