文章

控制攝影機(Camera) 的視角與移動

在Unity中,攝影機 (Camera) 是用來捕捉和顯示遊戲世界的視覺內容的核心組件。通過控制攝影機的視角和移動,可以創建各種不同的遊戲視角和效果,例如第一人稱視角、第三人稱視角、跟隨攝影機等。

1. 攝影機的基本設置

Unity中的攝影機預設為主攝影機 (Main Camera),它決定了玩家在遊戲中的視角和可見區域。

調整視角 (Field of View, FOV)

  • FOV 定義了攝影機的視角範圍,類似於人眼的視野角度。
  • 在選擇攝影機後,在 Inspector 面板中找到 Camera 組件。
  • 調整 Field of View 滑桿,範圍通常在60-90度之間,較低的數值適合狹窄的視角(如狙擊鏡),較高的數值適合廣角視圖。

設置攝影機的視圖模式

  • 透視模式 (Perspective):模擬人眼的視覺效果,物體隨距離增大而變小,適合3D遊戲。
  • 正交模式 (Orthographic):沒有透視效果,所有物體無論距離遠近大小不變,適合2D遊戲或特定場景。

2. 攝影機的移動

攝影機的移動通常通過編程腳本或動畫來實現,以便控制攝影機在場景中的位置和旋轉。

手動控制攝影機

你可以直接在場景視圖中選擇並移動攝影機來調整其位置。

  1. 移動攝影機
    • 選擇 Main Camera,然後使用 Move Tool(快捷鍵 W)在場景中移動攝影機到所需位置。
  2. 旋轉攝影機
    • 使用 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是個強大的工具,用於攝影機控制,它可以自動跟隨並調整攝影機的視角,非常適合需要複雜攝影機運動的遊戲。

  1. 安裝Cinemachine
    • 在Unity的 Package Manager 中搜索 Cinemachine 並安裝。
  2. 設置Cinemachine Virtual Camera
    • 安裝完成後,選擇 Cinemachine > Create FreeLook Camera 來創建一個虛擬攝影機。
    • Inspector 面板中,將 Follow 設置為玩家角色,並設置 Look At 為玩家角色的頭部或身體。
  3. 調整Cinemachine參數
    • 使用 Rig 設置來調整攝影機的運動範圍和速度。
    • Cinemachine可以自動處理攝影機的平滑移動和碰撞檢測,使攝影機的運動更自然。

3. 攝影機的過場動畫與切換

在遊戲中,有時需要在不同的攝影機之間切換視角,或使用攝影機過場動畫來展現特定劇情。

使用動畫控制攝影機

你可以使用Unity的動畫系統來創建攝影機的過場動畫。

  1. 創建動畫
    • 選擇 Main Camera,然後打開 Animation 視圖 (Window > Animation > Animation)。
    • 點擊 Create 並保存一個新的動畫文件,如 CameraCutscene
    • 在時間軸上記錄攝影機的位置、旋轉和視角變化,創建你想要的動畫效果。
  2. 播放動畫
    • 你可以在特定事件發生時使用腳本或觸發器來播放這個動畫。
    • 例如,在某個點開始過場動畫,然後再切換回玩家控制的攝影機。

攝影機切換

在場景中使用多個攝影機來切換不同的視角,例如切換到不同角色的視角。

  1. 創建多個攝影機
    • 在場景中創建多個攝影機,每個攝影機設置不同的視角和位置。
  2. 腳本切換攝影機
    • 編寫一個腳本來在特定條件下啟用或禁用攝影機。例如,當玩家進入特定區域時切換到另一個攝影機。
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 授權