U
tab 02Nhân vật & Chiến đấu9 bài — chạm để mở
01 / 09 · 9 phút
Nhân vật & Chiến đấu

Tạo nhân vật

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

Assets/

Scenes/

Arena.unity

KnightMageArcherCharacterControllerCameraTarget

Scripts/

SimpleMover.csCharacterSwitcher.csCharacterStats.cs

Prefabs/

Knight prefab

Models/

Knight model (FBX)

đã có sẵnbài này thêm

Mở lại Arena.unity của tab 01. Bạn đang có ba capsule đứng trên sàn — Knight, Mage, Archer — và phím 1 / 2 / 3 đổi qua lại. Cả tab này chỉ làm việc trên Knight.

Mage và Archer cứ để nguyên capsule từ đầu tới cuối. Giữ chúng lại là có chủ ý: cuối mỗi bài, bạn bấm phím 2 là thấy ngay Knight đã tiến bộ tới đâu khi đặt cạnh chúng.

Nhân vật game là bốn lớp trên cùng một GameObject: model để nhìn, khung xương để làm hoạt ảnh, Animator để chọn clip, và collider để va chạm với thế giới.

sơ đồ động

Model, khung xương, Animator, controller — cần đủ bốn thứ thì nhân vật mới đi được.

Lấy nhân vật ở đâu

  • Mixamo (miễn phí, cần tài khoản Adobe): chọn nhân vật, chọn hoạt ảnh, tải về dạng FBX. Cách bắt đầu nhanh nhất.

  • Unity Asset Store: tìm 'free character' rồi lọc giá 0.

  • Hoặc cứ giữ capsule Knight của tab 01 — mọi script dưới đây chạy được với capsule, model thay vào lúc nào cũng được.

Thiết lập import quan trọng

  1. 1

    Kéo file .fbx vào Assets/Models. Chọn nó rồi mở tab Rig.

  2. 2

    Animation Type → Humanoid, rồi Apply. Bước này ánh xạ xương của model vào bộ xương chuẩn của Unity.

  3. 3

    Humanoid nghĩa là hoạt ảnh Mixamo nào cũng chạy được trên nhân vật Mixamo nào — clip dùng chéo được.

  4. 4

    Ở tab Materials chọn Extract Textures / Extract Materials để có thể chỉnh sửa.

Ráp đối tượng nhân vật

  1. 1

    Chọn Knight trong Hierarchy. Gỡ MeshFilter, MeshRenderer và Capsule Collider của capsule — Character Controller ở bước dưới sẽ thay cho collider — nhưng giữ nguyên GameObject và cái tên.

  2. 2

    Kéo model vào làm con của Knight, ở vị trí cục bộ 0, 0, 0. Đối tượng cha giữ nguyên tên, giữ nguyên script, và giữ nguyên chỗ trong danh sách của switcher.

  3. 3

    Ngay trên Knight, thêm Component▸Physics▸Character Controller.

  4. 4

    Đặt Height 1.8, Radius 0.3, Center Y 0.9 để capsule ôm đúng thân người, chân chạm Y = 0. Rồi đưa Position Y của Knight về 0 — giờ collider lo phần nâng người lên, không phải transform nữa.

  5. 5

    Tạo đối tượng con rỗng tên CameraTarget ở Y = 1.5 — camera sẽ ngắm vào đó chứ không ngắm vào chân. Tab 03 sẽ cần nó.

  6. 6

    Cuối cùng kéo Knight vào Assets/Prefabs. Từ giờ nó là prefab — Knight được lưu thành một file riêng, chứ không chỉ là một object trong cảnh này.

Dùng CharacterController hay Rigidbody?

✓ CharacterController

Cho nhân vật người chơi

Điều khiển trực tiếp, dễ đoán, không phải giằng co với vật lý. Gần như mọi game góc nhìn thứ ba đều dùng cái này.

✓ Rigidbody

Cho vật thể bị xô đẩy

Vật lý thật: lực, nảy, ragdoll. Hợp với thùng gỗ, khó chịu khi làm nhân vật chính.

Component chỉ số để xây tiếp

CharacterStats.cs — attach to Knight, and later to every enemy
using UnityEngine;

public class CharacterStats : MonoBehaviour
{
    [Header("chỉ số gốc")]
    public float maxHealth = 100f;
    public float attack = 20f;
    public float defense = 10f;
    public float moveSpeed = 5f;

    [Header("lúc chạy")]
    public float currentHealth;

    public bool IsAlive => currentHealth > 0f;

    void Awake()
    {
        currentHealth = maxHealth;
    }

    public void TakeDamage(float rawDamage)
    {
        if (!IsAlive) return;

        float reduced = Mathf.Max(1f, rawDamage - defense);   // tối thiểu 1
        currentHealth = Mathf.Max(0f, currentHealth - reduced);

        if (!IsAlive) Die();
    }

    void Die()
    {
        Debug.Log(name + "đã chết");
        //bài sau
    }
}