Bir Hedef Bul
Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 8 / 25.
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.Görev
OrtaHer kule, menzilindeki en yakın düşmanı seçer.
Enemyiçindepublic static readonly List<Enemy> All = new List<Enemy>();ekle;OnEnableiçindethisöğesini ekle,OnDisableiçinde kaldır.Toweriçinepublic float range = 4f;veprivate Enemy target;ekle.- Her karede,
Enemy.Alliçinderangemesafesindeki en yakın düşmanı bul (yoksa null); yeni olduğunda"Target: " + found.namemesajını kayda geçir ve onutargetiçinde tut.
“Oyna” düğmesine bas ve yolun yanına kule inşa et: Console her yeni hedefin adını gösterir. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
// Daha sonra eklenecek: Bir kule menzilindeki bir düşmanı bulur, ona döner ve ateş eder.
public class Tower : MonoBehaviour
{
}
Unity Oyunu: Kule Savunması bölümündeki tüm dersler
Kendi başına pratik yap: Unity playground