Menu
CoddyTech

Ateş Et

Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 9 / 18.

Bir kule, hedefini saniyede fireRate kez vurur. Geri sayım yapan bir zamanlayıcı yerine kule, bir sonraki atışının zamanını tutar: Time.time bu zamana ulaştığında kule ateş eder ve zamanı 1f / fireRate saniye ileri alır. Saniyede iki kez su püskürten bir fıskiye:

if (Time.time >= nextSpray)
{
    Spray();
    nextSpray = Time.time + 1f / spraysPerSecond;
}

Her atış, MoveTowards ile hedefine doğru ilerleyen, hedef yürürken onu takip eden ve ona vardığında hasar veren bir Projectile'dır. Bir Enemy'ye isabet ettiğini bilmesi gerekmez: Interfaces bölümünde olduğu gibi, hasar alabilen her şey için kullanılan arayüz olan IDamageable'ı hedefinden ister; böylece bu arayüzü uygulayan her şey vurulabilir.

Bir atış havadayken hedef, başka bir kulenin atışıyla öldürülebilir. Bu durumda atışın target'ı, yok edilmiş her Unity nesnesinde olduğu gibi null'a eşit olur ve atışın artık uçacağı bir yer kalmaz; bu yüzden kendini yok eder.

challenge icon

Görev

Orta
  1. IDamageable, void TakeDamage(int amount) metodunu bildirir. Enemy sınıfının bunu uygulamasını sağla: amount, canından düşülür ve can 0 veya daha az olduğunda düşman yok edilir.
  2. Projectile sınıfına serileştirilmiş bir float speed (prefab 12 olarak ayarlar) ve her ikisini de saklayan public void Launch(Transform target, int damage) metodunu ekle. Update içinde hedefe doğru speed hızında ilerlesin; hedefe ulaştığında IDamageable üzerindeki TakeDamage(damage) metodunu çağır ve mermiyi yok et. Hedef artık yoksa mermiyi yok et.
  3. Tower sınıfına bir public int damage, bir public float fireRate (saniyedeki atış sayısı) ve serileştirilmiş bir projectilePrefab (bir Projectile) ekle. Kule bir hedefe sahipken saniyede en fazla fireRate kez ateşlesin: mermiyi başın biraz önünde, head.position + head.forward * 0.6f konumunda oluştur ve kulenin hasar değeriyle hedefe fırlat.

ArrowTower prefab'ı hasarı 2, fireRate değerini 1.5 olarak ayarlar ve mermisi ArrowShot'tur. Play'e bas, kuleler inşa et ve ilk dalgayı durdur, ardından Check'e bas.

Kendin dene

using UnityEngine;

// Daha sonra gelecek: Bir kuleden hedefine doğru uçan bir atış.
public class Projectile : MonoBehaviour
{
}
quiz iconKendini test et

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

Unity Oyunu: Kule Savunması bölümündeki tüm dersler