U
tab 01Căn bản11 bài — chạm để mở
03 / 11 · 5 phút
Căn bản

Class = component

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

Vẫn đang đọc. Khuôn Player.cs ở đây là khuôn của mọi script bạn viết từ bài 06 trở đi.

Bắt đầu bằng một chữ: GameObject. Mọi thứ tồn tại trong game — sàn nhà, camera, nhân vật, viên đạn — đều là một GameObject.

Nhưng tự thân nó chỉ là con búp bê rỗng. Nó có một cái tên và một chỗ để đứng, thế thôi: bạn không nhìn thấy nó, không đụng vào nó được, và nó chẳng làm gì cả.

Bạn biến nó thành thứ có thật bằng cách lắp các mảnh vào. Mỗi mảnh gọi là một component. Còn class C# mà bạn sắp viết cũng chỉ là một mảnh lắp thêm như vậy.

sơ đồ động

Xem bốn mảnh lần lượt lắp vào — chỉ sau mảnh cuối cùng thì nhân vật mới thật sự cử động.

Bốn mảnh đó, nói cho dễ hiểu

  • Transform — đứng ở đâu, quay mặt hướng nào, to nhỏ cỡ nào. GameObject nào cũng có mảnh này và không gỡ ra được.

  • Mesh Renderer — mảnh lo việc vẽ nó lên màn hình. Gỡ mảnh này ra thì nhân vật vẫn còn đó, chỉ là vô hình.

  • Collider — cái thân thể vô hình. Không có nó thì nhân vật đi xuyên tường và lọt qua sàn.

  • Player.cs — mảnh do chính bạn viết. Nó là thứ quyết định: khi người chơi bấm W thì bước tới.

Giờ tự viết mảnh thứ tư

Ba mảnh đầu Unity viết sẵn cho bạn rồi. Mảnh thứ tư — cái đầu — là một file C#. Mọi script Unity đều có cùng một khuôn, bạn chỉ đổi phần nằm trong dấu ngoặc nhọn.

Player.cs — the file name must match the class name
using UnityEngine;                          // nạp thư viện Unity

public class Player : MonoBehaviour         // lắp được lên GameObject
{
    public float speed = 5f;                //script khác không thấy, vẫn chỉnh được
    [SerializeField] private int hp = 100;
    private bool isDead;                    // chỉ dùng trong code

    void Start()
    {
        Debug.Log(name + " ready, hp = " + hp);
    }
}

Dòng ": MonoBehaviour" chính là toàn bộ mấu chốt. Nó biến một class C# bình thường thành một mảnh được phép lắp lên GameObject. Bỏ nó đi là script không gắn vào đâu được nữa.

  • File phải có tên Player.cs — Unity so tên file với tên class, sai tên là không gắn được component.

  • public = script khác đọc được VÀ nó hiện trong Inspector.

  • [SerializeField] private = lựa chọn mặc định tốt nhất: hiện trong Inspector nhưng script khác không đụng vào được.

sơ đồ động

Trường dữ liệu khai báo một lần trong code; sau đó bạn chỉnh nó trong Inspector, ngay cả khi game đang chạy.

Tạo và gắn script

  1. 1

    Trong cửa sổ Project: Chuột phải▸Create▸MonoBehaviour Script (Unity cũ: C# Script).

  2. 2

    Gõ tên ngay lúc đó — đổi tên sau sẽ không đổi tên class bên trong.

  3. 3

    Chọn một GameObject trong Hierarchy, rồi kéo script thả vào Inspector.

  4. 4

    Bấm Play. Mọi thứ Debug.Log sẽ hiện ở cửa sổ Console.

Lấy component khác

C# script
private Rigidbody rb;

void Awake()
{
    rb = GetComponent<Rigidbody>();   // trên chính đối tượng này
}