控制攝影機(Camera) 的視角與移動
在Unity中,攝影機 (Camera) 是用來捕捉和顯示遊戲世界的視覺內容的核心組件。通過控制攝影機的視角和移動,可以創建各種不同的遊戲視角和效果,例如第一人稱視角、第三人稱視角、跟隨攝影機等。
1. 攝影機的基本設置
Unity中的攝影機預設為主攝影機 (Main Camera),它決定了玩家在遊戲中的視角和可見區域。
調整視角 (Field of View, FOV)
- FOV 定義了攝影機的視角範圍,類似於人眼的視野角度。
- 在選擇攝影機後,在
Inspector
面板中找到Camera
組件。 - 調整
Field of View
滑桿,範圍通常在60-90度之間,較低的數值適合狹窄的視角(如狙擊鏡),較高的數值適合廣角視圖。
設置攝影機的視圖模式
- 透視模式 (Perspective):模擬人眼的視覺效果,物體隨距離增大而變小,適合3D遊戲。
- 正交模式 (Orthographic):沒有透視效果,所有物體無論距離遠近大小不變,適合2D遊戲或特定場景。
2. 攝影機的移動
攝影機的移動通常通過編程腳本或動畫來實現,以便控制攝影機在場景中的位置和旋轉。
手動控制攝影機
你可以直接在場景視圖中選擇並移動攝影機來調整其位置。
- 移動攝影機:
- 選擇
Main Camera
,然後使用Move Tool
(快捷鍵W
)在場景中移動攝影機到所需位置。
- 選擇
- 旋轉攝影機:
- 使用
Rotate Tool
(快捷鍵E
)來旋轉攝影機,使其面向正確的方向。
- 使用
通過腳本控制攝影機移動
你可以編寫簡單的C#腳本來控制攝影機的移動和旋轉。
第一人稱視角 (First-Person View)
以下是一個簡單的腳本,用於讓攝影機跟隨玩家並且能夠通過滑鼠控制視角。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using UnityEngine;
public class FirstPersonCamera : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
float xRotation = 0f;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerBody.Rotate(Vector3.up * mouseX);
}
}
這段腳本讓攝影機與玩家角色的身體一起旋轉,並且可以使用滑鼠來調整視角。
第三人稱視角 (Third-Person View)
第三人稱視角通常需要攝影機跟隨玩家角色並保持一定距離。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
public class ThirdPersonCamera : MonoBehaviour
{
public Transform target;
public float distance = 5.0f;
public float height = 2.0f;
public float rotationDamping = 3.0f;
void LateUpdate()
{
float wantedRotationAngle = target.eulerAngles.y;
float wantedHeight = target.position.y + height;
float currentRotationAngle = transform.eulerAngles.y;
float currentHeight = transform.position.y;
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, rotationDamping * Time.deltaTime);
Quaternion currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
transform.position = target.position - currentRotation * Vector3.forward * distance;
transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
transform.LookAt(target);
}
}
這個腳本讓攝影機跟隨玩家角色,保持一定的高度和距離,並且可以平滑地旋轉。
設置攝影機跟隨 (Cinemachine)
Unity的Cinemachine是個強大的工具,用於攝影機控制,它可以自動跟隨並調整攝影機的視角,非常適合需要複雜攝影機運動的遊戲。
- 安裝Cinemachine:
- 在Unity的
Package Manager
中搜索Cinemachine
並安裝。
- 在Unity的
- 設置Cinemachine Virtual Camera:
- 安裝完成後,選擇
Cinemachine > Create FreeLook Camera
來創建一個虛擬攝影機。 - 在
Inspector
面板中,將Follow
設置為玩家角色,並設置Look At
為玩家角色的頭部或身體。
- 安裝完成後,選擇
- 調整Cinemachine參數:
- 使用
Rig
設置來調整攝影機的運動範圍和速度。 - Cinemachine可以自動處理攝影機的平滑移動和碰撞檢測,使攝影機的運動更自然。
- 使用
3. 攝影機的過場動畫與切換
在遊戲中,有時需要在不同的攝影機之間切換視角,或使用攝影機過場動畫來展現特定劇情。
使用動畫控制攝影機
你可以使用Unity的動畫系統來創建攝影機的過場動畫。
- 創建動畫:
- 選擇
Main Camera
,然後打開Animation
視圖 (Window > Animation > Animation
)。 - 點擊
Create
並保存一個新的動畫文件,如CameraCutscene
。 - 在時間軸上記錄攝影機的位置、旋轉和視角變化,創建你想要的動畫效果。
- 選擇
- 播放動畫:
- 你可以在特定事件發生時使用腳本或觸發器來播放這個動畫。
- 例如,在某個點開始過場動畫,然後再切換回玩家控制的攝影機。
攝影機切換
在場景中使用多個攝影機來切換不同的視角,例如切換到不同角色的視角。
- 創建多個攝影機:
- 在場景中創建多個攝影機,每個攝影機設置不同的視角和位置。
- 腳本切換攝影機:
- 編寫一個腳本來在特定條件下啟用或禁用攝影機。例如,當玩家進入特定區域時切換到另一個攝影機。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
public class CameraSwitch : MonoBehaviour
{
public Camera mainCamera;
public Camera secondaryCamera;
void Start()
{
mainCamera.enabled = true;
secondaryCamera.enabled = false;
}
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
mainCamera.enabled = false;
secondaryCamera.enabled = true;
}
}
}
小結
通過靈活控制攝影機的視角和移動,你可以大大提升遊戲的沉浸感和玩家體驗。無論是第一人稱、第三人稱還是固定視角的遊戲,都可以通過適當的攝影機設置來達到最佳效果。隨著你對Unity的熟練程度增加,你可以嘗試更複雜的攝影機運動和切換,創造出更有動感和戲劇性的遊戲場景。
本文章以 CC BY 4.0 授權