Unity中幾種常見(jiàn)的Camera
Unity不同游戲里,有不同的Camera,這里簡(jiǎn)單介紹下。
官方標(biāo)準(zhǔn)資源提供了4種Camera
CctvCamera
這種類(lèi)似于電視轉(zhuǎn)播的攝像機(jī)看到的情形,攝像機(jī)固定在遠(yuǎn)處,通過(guò)轉(zhuǎn)動(dòng)角度,跟蹤拍攝對(duì)象,類(lèi)似于足球游戲常會(huì)用到的視角。
將預(yù)制件拖到場(chǎng)景中,位置最好離對(duì)象遠(yuǎn)點(diǎn),將對(duì)象拖到Target里,可以通過(guò)調(diào)節(jié)Field View來(lái)控制對(duì)象顯示的大小,相當(dāng)于在調(diào)整焦距。
FreeLookCamera
這個(gè)是會(huì)將對(duì)象一直顯示在屏幕中,可以通過(guò)鼠標(biāo)上下左右移動(dòng)觀看周?chē)?,和魔獸世界里面按下鼠標(biāo)左鍵以后的那個(gè)視角一樣。
將預(yù)制件拖到場(chǎng)景,位置會(huì)自己去定,將對(duì)象拖到Target里,可以通過(guò)FreeLookCameraRig的孫子對(duì)象的Field View來(lái)控制對(duì)象顯示的大小,相當(dāng)于在調(diào)整焦距。

HandHeldCamera
這個(gè)像是一個(gè)可以自動(dòng)變焦,可以保持對(duì)象顯示大小始終一致的CctvCamera
將預(yù)制件拖到場(chǎng)景,位置會(huì)自己去定,將對(duì)象拖到Target里,可以通過(guò)Zoom Amount Multiplier來(lái)調(diào)整最初的焦距。

第一人稱視角
Unity的第一人稱視角是和控制和在一起的一個(gè)預(yù)制件,直接拖到場(chǎng)景中就可以用了。

以上是Unity標(biāo)準(zhǔn)資源里的,下面再介紹幾個(gè)其他的
LookAtCamera
這個(gè)可以理解為CctvCamera的簡(jiǎn)化版,代碼如下
把腳本拖到Camera上,然后設(shè)置target對(duì)象即可。
using UnityEngine;
public class LookAtCamera : MonoBehaviour
{
publicGameObject target;
voidLateUpdate ()
{
transform.LookAt(target.transform);
}
}
DungeonCamera
Camera和對(duì)象的距離和角度始終保持不變,類(lèi)似于暗黑破壞神的視角
把腳本拖到Camera上,然后設(shè)置target對(duì)象即可。
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始終在對(duì)象后方的同時(shí),Camera的正前方始終和對(duì)象的正前方保持一致,隨對(duì)象旋轉(zhuǎn)而旋轉(zhuǎn)。類(lèi)似神廟逃亡的視角,或者是魔獸世界默認(rèn)的視角。
把腳本拖到Camera上,然后設(shè)置target對(duì)象即可。
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);
}
更多資源請(qǐng)點(diǎn)擊:https://bycwedu.vipwan.cn/promotion_channels/630597732