Menu
CoddyTech

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.
challenge icon

Tantangan

Sedang
  1. Di Enemy, tambahkan list baru public static readonly List<Enemy> All. Setiap musuh menambahkan dirinya sendiri di OnEnable dan menghapus dirinya sendiri di OnDisable.
  2. Di Tower, tambahkan float publik range (prefab ArrowTower menetapkan nilainya menjadi 4.5) dan Enemy privat target.
  3. Setiap frame, tetapkan target ke musuh di Enemy.All yang paling dekat dengan menara, selama musuh itu berada dalam range. Jika tidak ada musuh dalam jangkauan, target bernilai 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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Tower Defense