Tạo nhân vật
Assets/
Scenes/
Arena.unity
Scripts/
Prefabs/
Models/
đã 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.
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
Kéo file .fbx vào Assets/Models. Chọn nó rồi mở tab Rig.
- 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
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
Ở tab Materials chọn Extract Textures / Extract Materials để có thể chỉnh sửa.
Ráp đối tượng nhân vật
- 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
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
Ngay trên Knight, thêm .
- 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
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
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
✓ Rigidbody
Cho vật thể bị xô đẩy
Component chỉ số để xây tiếp
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
}
}