Menu
CoddyTech

Hedef Bul

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

Bir kule, o düşman kulenin range değeri içindeyse kendisine en yakın düşmana ateş eder. Seçim yapabilmek için kulenin oyun alanındaki her düşmanı bilmesi gerekir. FindObjectsByType<Enemy> her kule için her karede tüm sahneyi tarardı; bunun yerine düşmanlar kendi listelerini tutar: Enemy sınıfında statik bir liste bulunur ve her düşman OnEnable içinde listeye katılır, OnDisable içinde listeden çıkar. Unity, yok edilmekte olan bir nesne için OnDisable çağırır; bu nedenle ölü bir düşman da listeden çıkar. Bir oyundaki toplanabilir nesneler de aynısını yapabilir:

public class Pickup : MonoBehaviour
{
    public static readonly List<Pickup> All = new List<Pickup>();

    void OnEnable()
    {
        All.Add(this);
    }

    void OnDisable()
    {
        All.Remove(this);
    }
}

En yakındakini bulmak, şimdiye kadarki en iyiyi akılda tutan bir döngüdür. pullRange içindeki en yakın toplanabilir nesneyi çeken bir mıknatıs, başlangıçta hiçbir toplanabilir nesne olmadığını ve en iyi mesafenin menzil olduğunu varsayar; böylece daha uzaktaki bir nesne asla seçilemez:

Pickup best = null;
float bestDistance = pullRange;
foreach (Pickup pickup in Pickup.All)
{
    // Şimdiye kadarki en iyisinden daha mı yakın? Onu ve mesafesini sakla
}
Vector3.Distance(a, b) iki nokta arasındaki mesafeyi verir. Menzil içinde hiçbir şey yoksa döngü hiçbir şeyi seçmez ve yanıt null olur.
challenge icon

Görev

Orta
  1. Enemy içinde yeni bir liste olan public static readonly List<Enemy> All ekleyin. Her düşman, OnEnable içinde kendisini listeye ekler ve OnDisable içinde listeden çıkarır.
  2. Tower içinde bir public float range (ArrowTower prefab'ı bunu 4.5 olarak ayarlar) ve bir private Enemy target ekleyin.
  3. Her karede, target değerini Enemy.All içindeki kuleye en yakın düşman olarak ayarlayın; ancak bu düşman range içinde olmalıdır. Menzilde düşman yoksa target null olur.

Kule henüz hedefiyle ilgili bir şey yapmaz: sonraki ders, kulenin hedefe dönmesini sağlar. Play'e basın, yolun yanına bir kule inşa edin, ardından Check'e basın.

Kendin dene

using UnityEngine;

public class Tower : MonoBehaviour
{
    public int cost = 50;
}
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