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.
Thử thách
DễKhiến các thùng đạn nạp thêm đạn cho Blaster (ammo 4, maxAmmo 10).
- Trong
Blaster.cs, thêmpublic int AddAmmo(int amount):int taken = Mathf.Min(amount, maxAmmo - ammo);, cộng giá trị đó vàoammo, ghi nhật ký"Ammo: " + ammorồi trả vềtaken. - Trong
AmmoCrate.cs, khiother.TryGetComponent(out Blaster blaster)trả về đúng, gọiblaster.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
1Rigidbody
Trọng lực và khối lượngĐẩy bằng AddForceNhảy bằng xung lựcFixedUpdate cho vật lýVận tốcVật thể động họcÔn tập: Bệ phóng4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine đầu tiên của bạnVòng lặp trong CoroutineDừng CoroutineÔn tập: đếm ngược10Dự án: Thoát khỏi đấu trường
Đấu trườngThợ săn2Va chạm
OnCollisionEnterMình đã va chạm với gì?Vỡ khi va chạmĐứng trên mặt đấtĐộ nảy và ma sátHình dạng colliderÔn tập: Tường có thể phá vỡ5Dự án: Cuộc đua thu thập xu
Quả bóng lănThu thập xuTự luyện tập: Playground Unity