U
tab 03Camera & Điều khiển6 bài — chạm để mở
03 / 06 · 8 phút
Camera & Điều khiển

Cinemachine và rung camera

dự án của bạn tới lúc này

Assets/

Scenes/

Arena.unity

CameraTargetCinemachineBrainCM vcamImpulse source / listenerOrbitCamera.cs→Cinemachine vcam

thiết lập dự án

Cinemachine package

đã có sẵnbài này thêmbài này thay thế

Bước ba, cũng là bước cuối. Cinemachine thay cả FollowCamera lẫn OrbitCamera bằng component chỉ cần cấu hình — và nó xử lý chống xuyên tường, độ trễ, chuyển cảnh tốt hơn code bạn vừa viết.

sơ đồ động

Cùng ý tưởng xoay quanh, nhưng độ trễ, chống xuyên tường và canh khung đều có sẵn.

Cài đặt và thiết lập

  1. 1

    Window▸Package Manager▸Unity Registry → tìm Cinemachine → Install.

  2. 2

    GameObject▸Cinemachine▸Virtual Camera (Cinemachine 3: CinemachineCamera).

  3. 3

    Unity tự thêm CinemachineBrain vào Main Camera. Cái brain đó mới là thứ điều khiển camera thật.

  4. 4

    Trên virtual camera, đặt Follow = Knight và Look At = CameraTarget của Knight.

Cách hình dung

  • Virtual camera không phải camera. Nó là công thức: 'đứng đây, nhìn kia, với độ trễ chừng này'.

  • Cái Brain trên Main Camera chọn virtual camera có Priority cao nhất đang bật, rồi chuyển mượt sang nó.

  • Nên đổi camera chỉ là đổi Priority hoặc gọi SetActive — phần chuyển cảnh có sẵn, không tốn code.

Camera góc nhìn thứ ba chỉ với hai cú click

  1. 1

    Trên virtual camera, đặt Body = Third Person Follow (hoặc Orbital Follow ở CM3).

  2. 2

    Đặt Camera Distance 6, Shoulder Offset X 0.5, Damping 0.3 / 0.3 / 0.3.

  3. 3

    Đặt Camera Collision Filter là các layer môi trường — vấn đề xuyên tường coi như xong.

  4. 4

    Đặt Aim = Do Nothing nếu rig đã hướng đúng, hoặc Composer để luôn giữ mục tiêu trong khung.

✓ Hand-written camera

Camera tự viết

Bạn hiểu cơ chế và kiểm soát từng dòng. Hợp với game nhỏ.

✓ Cinemachine

Dùng Cinemachine

Chống xuyên, độ trễ, rung, chuyển cảnh, cutscene — đã giải sẵn và đã dùng thực chiến.

Rung camera bằng Impulse

  1. 1

    Thêm Cinemachine Impulse Listener vào virtual camera.

  2. 2

    Thêm Cinemachine Impulse Source vào thứ phát nổ hoặc gây sát thương.

  3. 3

    Gọi GenerateImpulse() từ code, mọi listener trong tầm sẽ rung.

HitShake.cs
using UnityEngine;
using Unity.Cinemachine;      // Cinemachine 2: using Cinemachine;

public class HitShake : MonoBehaviour
{
    [SerializeField] private CinemachineImpulseSource source;

    public void Shake(float strength = 1f)
    {
        source.GenerateImpulseWithForce(strength);
    }
}

Đổi camera cho skill hoặc cutscene

C# script
[SerializeField] private CinemachineCamera gameplayCam;
[SerializeField] private CinemachineCamera ultimateCam;

public void PlayUltimate()
{
    ultimateCam.Priority = 20;      // số cao hơn thắng
    Invoke(nameof(BackToGameplay), 2f);
}

void BackToGameplay() => ultimateCam.Priority = 0;