Thành phần nhỏ
Thuộc phần Kiến trúc trò chơi trong Unity trong hành trình Unity của Coddy. Bài học 1 trên 64.
Một GameObject là tập hợp các thành phần, và mỗi script bạn viết là một thành phần bổ sung. Game Unity được xây dựng bằng cách giao cho mỗi script một nhiệm vụ rồi gắn nhiều script lên một đối tượng. Chuyển động, bắn và điểm máu của người chơi có thể cùng nằm trong một PlayerController, nhưng nếu tách thành ba thành phần, Mover, Shooter và Health, thì mỗi thành phần cũng có thể được gắn lên các đối tượng khác:
public class Health : MonoBehaviour
{
public int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}- Người chơi: Mover, Shooter, Health
- Tháp pháo: Shooter, Health
- Thùng: Health
Với các lớp C# thông thường, bạn có thể dựng một cây kế thừa thay thế: Character, rồi đến ShootingCharacter : Character, rồi đến Player : ShootingCharacter. Tháp pháo bắn nhưng không bao giờ đi lại, còn thùng chỉ vỡ, nên mỗi loại đối tượng mới đều đòi hỏi phải chỉnh lại cây kế thừa. Với các thành phần, một loại đối tượng mới là sự kết hợp mới từ những script đã có, được ghép với nhau trong Inspector; mỗi script cũng có thể có giá trị riêng tại đó: một Mover chậm trên đối tượng này, một Mover nhanh trên đối tượng khác.
Các thành phần trên cùng một đối tượng dùng chung Transform của đối tượng đó, vì vậy mỗi thành phần chỉ nên thay đổi phần mình phụ trách. Mover cộng thêm vào x và z bằng transform.position += sẽ giữ nguyên y, nên Jumper trên cùng đối tượng vẫn có thể thay đổi độ cao. Mover đặt lại toàn bộ vị trí thành new Vector3(x, 0.5f, z) sẽ đặt y về giá trị đó mỗi khung hình và hủy cú nhảy.
Thử thách
DễTách Boat.cs để mỗi tập lệnh chỉ làm một việc.
- Chuyển chuyển động nhấp nhô lên xuống vào
Bobber: đặtstartYtrongStart(), xử lý chuyển động nhấp nhô lên xuống trongUpdate(), dùngheightvàspeedriêng. - Chuyển thao tác nhấp nháy vào
Blinker, với bộ đếm thời gian riêng. - Xóa cả hai nhiệm vụ và các trường tương ứng khỏi
Boat, để nó chỉ điều khiển thuyền.
Nhấn Chơi: chú vịt nhấp nhô lên xuống, phao nhấp nháy và thuyền di chuyển theo điều khiển. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
using UnityEngine.InputSystem;
// Một script, ba việc: điều khiển hướng, nhấp nhô và nhấp nháy.
public class Boat : MonoBehaviour
{
public float speed = 3f;
public float bobHeight = 0.1f;
public float bobSpeed = 2f;
public Renderer lamp;
public float blinkInterval = 0.5f;
private InputAction moveAction;
private float startY;
private float blinkTimer;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
startY = transform.position.y;
}
void Update()
{
// điều khiển hướng
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;
// nhấp nhô
Vector3 p = transform.position;
p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
transform.position = p;
// nhấp nháy
blinkTimer += Time.deltaTime;
if (blinkTimer >= blinkInterval)
{
blinkTimer -= blinkInterval;
lamp.enabled = !lamp.enabled;
}
}
}
Tất cả bài học trong Kiến trúc trò chơi trong Unity
1Thành phần, không phải hệ thống phân cấp
Thành phần nhỏTập lệnh kẻ địch cơ sởThành phần trừu tượngCác thành phần phối hợp với nhauÔn tập: tháp pháo mô-đunÔn tập: pháo nòng đôi4Dữ liệu tuần tự hóa
Lớp có thể tuần tự hóaDanh sách trong InspectorKiểu liệt kê trong InspectorÔn tập: Bảng vật phẩm rơiÔn tập: Quay vật phẩm2Giao diện trong Unity
IDamageableGiao diện và TryGetComponentGetComponentsÔn tập: phím tương tácÔn tập: đối tượng gần nhất trong tầm với5ScriptableObjects
Tài sản dữ liệuChỉ số vũ khíCài đặt dùng chungLưu gióSóng dưới dạng dữ liệuÔn tập: Cơ sở dữ liệu vật phẩmÔn tập: Mua hàng từ cửa hàng8Code có thể tái sử dụng
Phương thức mở rộngSingleton tổng quátCác hàm hỗ trợ tổng quátÔn tập: FindNearest3Sự kiện
Sự kiện C# trong UnityĐăng ký trong OnEnableCác trường UnityEventSự kiện điều khiển UIÔn tập: Cửa sổ bật lên thành tíchÔn tập: Bộ hẹn giờ cửa sổ bật lên6Lưu dữ liệu bằng JSON
JsonUtilityLưu trò chơiTải dữ liệu và giá trị mặc địnhÔn tập: các ô lưuChọn và xóa một ô lưu9Tái sử dụng đối tượng bằng pool
Vì sao cần pool đối tượngPool dùng hàng đợiObjectPool của UnityÔn tập: pool đạnTự luyện tập: Playground Unity