Menu
CoddyTech

Can ve Hasar

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

Hasar sistemi için iki betik gerekir. Health betiği, hasar alabilecek her nesnenin üzerinde bulunur ve can puanlarını yönetir; hasar veren nesne bu betiği bulup üzerindeki bir yöntemi çağırır. İşte üç darbeden sonra parçalanan bir kasanın Health betiği ve üzerlerine düşen her şeye hasar veren dikenler:

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Spikes : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Health health = collision.gameObject.GetComponent<Health>();
        if (health != null)
        {
            health.TakeDamage(1);
        }
    }
}

TakeDamage public olduğu için diğer betikler onu çağırabilir ve hp değerini değiştiren tek kod parçasıdır. Dikenler, mermiler ve lav aynı yöntemi çağırır; 0'ın ne anlama geldiğine yalnızca Health betiği karar verir: kasayı yok etmek, oyunu bitirmek veya bir ölüm animasyonu oynatmak. Her betik, sınıfının adını taşıyan kendi dosyasında bulunur.

GetComponent<Health>(), zemin gibi Health betiği olmayan nesneler için null döndürür; bu yüzden dikenler çağrı yapmadan önce kontrol eder. TryGetComponent(out Health health), aramayı ve kontrolü tek bir çağrıda yapar: yalnızca bir Health betiği varsa true döndürür ve health değişkenini doldurur.

challenge icon

Görev

Orta

Bir eğitim silahı bir mankene ve zırhlı bir şövalyeye ateş ediyor. Silah üzerindeki Shooter betiği hazır: sol ve sağ oklar silahı döndürüyor, Boşluk tuşu ise bir Bullet ateşliyor. İsabetlerin hasar vermesini sağlayan iki betiği yaz.

Manken ve Şövalye üzerindeki Health (hp ve armor değerlerini Inspector belirler):

  • Herkese açık bir TakeDamage(int amount) metodu: hp, amount eksi armor kadar azalır; ancak azalma her zaman en az 1 olur.
  • Her isabetten sonra nesnenin adını ve kalan hp değerini Dummy hp: 2 biçiminde günlüğe yaz.
  • hp 0 veya altına indiğinde nesneyi yok et.

Her merminin üzerindeki Bullet (damage değerini Inspector 2 olarak belirler):

  • Mermi, üzerinde bir Health bulunan bir şeye çarptığında, onun TakeDamage(damage) metodunu çağır.
  • Neye çarparsa çarpsın, duvar da dahil, mermiyi yok et.

Play'e bas, mankeni ve şövalyeyi devir, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 4;
    [SerializeField] private int armor = 0;

    public void TakeDamage(int amount)
    {
        // amount eksi armor kadar (en az 1) can kaybet, kalan canı kayda geçir, 0'da yok et
    }
}
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