Menu
CoddyTech

Vật phẩm thu thập

Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 17 trên 71.

Một vật phẩm nhặt được là một trình kích hoạt có tập lệnh riêng. Khi có thứ gì đó đi vào, vật phẩm sẽ kiểm tra xem đó có phải là người chơi không, trao hiệu ứng cho người chơi rồi tự hủy. Tập lệnh của người chơi lưu kết quả và cung cấp một phương thức công khai để áp dụng hiệu ứng đó. Túi cứu thương này hồi máu cho bất cứ đối tượng nào có tập lệnh Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, trên nhân vật người chơi
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) trả về false nếu một chiếc thùng trượt vào túi cứu thương, vì vậy chỉ đối tượng có tập lệnh Health mới nhặt được túi, còn người chơi đã đầy máu sẽ để túi lại dùng sau. Túi tìm người chơi thông qua other, nên bạn không cần tham chiếu đến túi trong Inspector, và một màn chơi có thể chứa năm mươi túi. Heal là public vì tập lệnh khác gọi nó, còn giới hạn 100 nằm trong Health, nơi duy nhất quản lý hp. Destroy(gameObject) xóa túi; Destroy(other.gameObject) sẽ xóa người chơi.

challenge icon

Thử thách

Dễ

Khiến các thùng đạn nạp thêm đạn cho Blaster (ammo 4, maxAmmo 10).

  1. Trong Blaster.cs, thêm public int AddAmmo(int amount): int taken = Mathf.Min(amount, maxAmmo - ammo);, cộng giá trị đó vào ammo, ghi nhật ký "Ammo: " + ammo rồi trả về taken.
  2. Trong AmmoCrate.cs, khi other.TryGetComponent(out Blaster blaster) trả về đúng, gọi blaster.AddAmmo(amount); và Destroy(gameObject);.

Nhấn Chơi rồi đi sang phải: Console hiển thị Ammo: 7, sau đó là Ammo: 10. Tiếp theo, nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // Blaster của người chơi nhận đạn, rồi thùng đạn biến mất
    }
}

Tất cả bài học trong Vật lý và lối chơi

Tự luyện tập: Playground Unity