Menu
CoddyTech

Basit Kule Savunması

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 48 / 50.

Sürüngenler yol boyunca üssünüze doğru ilerliyor ve üssü tek bir kule koruyor. Kule, menzilde bir sürüngen varken ona en yakın sürüngene cıvatalar fırlatıyor ve indirdiği her sürüngen altın kazandırıyor. Space, altını kulenin bir sonraki seviyesi için harcıyor: her seviye daha uzağa erişiyor, daha hızlı ateş ediyor veya daha sert vuruyor. Üsse ulaşan bir sürüngen içeri girer. Seviyeler, kodu değiştirmeden tasarımcının bir varlıkta ayarladığı oyun verileridir ve kule çok sayıda cıvata ateşlediğinden, her atış için bir tane oluşturup yok etmek yerine bunları bir havuzdan yeniden kullanır.

İki betik yaz: varlık türü olan TowerData ve Tower. Creep, Bolt ve CreepSpawner hazır.

challenge icon

Görev

Zor

Inspector, Tower'a data (Arrow varlığı), boltPrefab ve infoText sağlar. Input System'in Keyboard.current özelliği üzerinden Space tuşunu oku.

  • TowerData.cs içinde: Inspector'ın gösterebileceği bir TowerLevel sınıfı; public float range, public float fireEvery, public int damage ve public int cost (o seviyeye ulaşmanın bedeli) alanlarıyla birlikte; ayrıca Create menü girdisi olan bir ScriptableObject olan TowerData ve public List<TowerLevel> levels. Arrow varlığı üç seviye içerir: menzil 4, atış aralığı 1 s, hasar 1, maliyet 0; menzil 5, atış aralığı 0.6 s, hasar 1, maliyet 6; menzil 6, atış aralığı 0.4 s, hasar 2, maliyet 12.
  • Kule ilk seviyede ve 0 altınla başlar; bunlardan biri değiştiğinde infoText her ikisini de Level 1, 0 gold biçiminde gösterir.
  • Son atıştan bu yana seviyenin fireEvery saniyesi geçtiğinde ve menzil içinde bir creep olduğunda (creep'in collider'ı, Physics.OverlapSphere'in bulduğu şekilde kuleden range uzaklık içinde), kule kendisine en yakın creep'e ateş eder. Bir ObjectPool<Bolt>'tan bir bolt alır, onu kulenin konumuna yerleştirir ve bolt.Launch(creep, damage, pool.Release) çağrısını yapar: bolt işi bittiğinde son argümanı çağırır ve böylece havuza geri verilir. Bolt, havuzda beklerken devre dışı bırakılır, havuzdan alındığında etkinleştirilir.
  • Ölen her creep, bounty değerini altın olarak verir: statik Creep.Killed olayını dinle.
  • Bir sonraki seviye varsa ve altın cost değerini karşılıyorsa Space bu seviyeyi satın alır: maliyet altından düşülür, kule bir seviye yükselir ve Tower level 2 olarak log kaydı oluşturur. Aksi hâlde Space hiçbir şey yapmaz.

Play'e bas, yolu basılı tutup kuleyi yükselt, ardından Check'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;

public class Tower : MonoBehaviour
{
    [SerializeField] private TowerData data;
    [SerializeField] private Bolt boltPrefab;
    [SerializeField] private TMP_Text infoText;

    private int level;
    private int gold;
}
quiz iconKendini test et

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

Unity'de Oyun Mimarisi bölümündeki tüm dersler