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.Görev
OrtaEnemyiçinde yeni bir liste olanpublic static readonly List<Enemy> Allekleyin. Her düşman,OnEnableiçinde kendisini listeye ekler veOnDisableiçinde listeden çıkarır.Toweriçinde bir public floatrange(ArrowTower prefab'ı bunu 4.5 olarak ayarlar) ve bir private Enemytargetekleyin.- Her karede,
targetdeğeriniEnemy.Alliçindeki kuleye en yakın düşman olarak ayarlayın; ancak bu düşmanrangeiçinde olmalıdır. Menzilde düşman yoksatargetnull 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;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.