Menu
CoddyTech

Toplanabilir Nesneler

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 17 / 63.

Bir eşya alma nesnesi, kendi betiğine sahip bir tetikleyicidir. Bir şey içeri girdiğinde, eşya alma nesnesi bunun oyuncu olup olmadığını kontrol eder, etkisini aktarır ve kendini yok eder. Oyuncunun betiği sonucu saklar ve bunun için herkese açık bir yöntem sunar. Bu sağlık paketi, Health betiğine sahip olan her şeyi iyileştirir:

// 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, oyuncunun üzerinde
public int hp = 50;

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

other.TryGetComponent(out Health health), pakete doğru kayan bir sandık için false döndürür; böylece paketi yalnızca Health betiğine sahip bir nesne alabilir ve sağlığı tamamen dolu bir oyuncu paketi daha sonra almak üzere bırakır. Paket oyuncuyu other üzerinden bulur; bu nedenle hiçbir paketin Inspector referansına ihtiyacı yoktur ve bir seviyede bunlardan elli tane bulunabilir. Başka bir betik çağırdığı için Heal public olarak tanımlanmıştır ve 100 sınırı, hp'nin sahibi olan tek yerde, Health'te bulunur. Destroy(gameObject) paketi kaldırır; Destroy(other.gameObject) ise oyuncuyu kaldırır.

challenge icon

Görev

Kolay

Oyuncu bir Blaster taşır: ammo (başlangıçta 4) ve maxAmmo (10). Ok tuşları oyuncuyu hareket ettirir, Boşluk tuşu ateş eder ve her ikisi de kaydedilir. Mermi sandıklarının cephaneyi yenilemesini sağla:

  • Blaster.cs dosyasında, genel bir int AddAmmo(int amount) metodu ekle. amount değerinden maxAmmo sınırını aşmadan sığan miktarı alır, Ammo: 7 gibi yeni toplamı kaydeder ve aldığı miktarı döndürür.
  • AmmoCrate.cs dosyasında, oyuncu bir sandığa girdiğinde sandığın amount değerini Blaster'a sun ve aldığı miktarı çıkar. Artık boş olan sandık kaldırılır; içinde cephane kalan sandık ise daha sonra tekrar ziyaret edilmek üzere kalan miktarla durur.

İlk sandıkta 3, ikincisinde 5 cephane bulunur. Play'e bas, sağa yürü, birkaç el ateş et ve ikinci sandığa geri yürü, ardından Check'e bas.

Kendin dene

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // Oyuncunun Blaster'ı alabildiği kadarını alır; sandık kalanını tutar ve boşalınca kaybolur
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Fizik ve Oynanış bölümündeki tüm dersler