Cari Sasaran
Pelajaran 7 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.
Sebuah menara menembak musuh terdekat, selama musuh itu berada dalam range menara. Untuk memilih, menara membutuhkan semua musuh yang ada di arena. FindObjectsByType<Enemy> akan mencari di seluruh scene setiap frame untuk setiap menara, jadi sebagai gantinya, para musuh menyimpan daftar mereka sendiri: sebuah daftar statis pada class Enemy, yang diikuti setiap musuh di OnEnable dan ditinggalkan di OnDisable. Unity memanggil OnDisable pada object yang sedang dihancurkan, jadi musuh yang mati juga meninggalkan daftar. Pickup dalam game dapat melakukan hal yang sama:
public class Pickup : MonoBehaviour
{
public static readonly List<Pickup> All = new List<Pickup>();
void OnEnable()
{
All.Add(this);
}
void OnDisable()
{
All.Remove(this);
}
}Mencari yang terdekat adalah perulangan yang mengingat yang terbaik sejauh ini. Magnet yang menarik pickup terdekat dalam pullRange dimulai tanpa pickup dan dengan jarak tersebut sebagai jarak terbaik, sehingga pickup yang lebih jauh tidak mungkin terpilih:
Pickup best = null;
float bestDistance = pullRange;
foreach (Pickup pickup in Pickup.All)
{
// Lebih dekat daripada yang terbaik sejauh ini? Simpan beserta jaraknya.
}Vector3.Distance(a, b) memberikan jarak antara dua titik. Jika tidak ada yang berada dalam jangkauan, perulangan tidak memilih apa pun, dan hasilnya adalah null.Tantangan
Sedang- Di
Enemy, tambahkan list barupublic static readonly List<Enemy> All. Setiap musuh menambahkan dirinya sendiri diOnEnabledan menghapus dirinya sendiri diOnDisable. - Di
Tower, tambahkan float publikrange(prefab ArrowTower menetapkan nilainya menjadi 4.5) dan Enemy privattarget. - Setiap frame, tetapkan
targetke musuh diEnemy.Allyang paling dekat dengan menara, selama musuh itu berada dalamrange. Jika tidak ada musuh dalam jangkauan,targetbernilai null.
Menara belum melakukan apa pun dengan targetnya: pelajaran berikutnya akan membuatnya menghadap target. Tekan Play, bangun menara di samping jalur, lalu tekan Check.
Coba sendiri
using UnityEngine;
public class Tower : MonoBehaviour
{
public int cost = 50;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.