Titik Jalur
Pelajaran 1 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.
Di kursus ini, kamu membuat game tower defense. Musuh bergerak menyusuri jalur dalam gelombang menuju markasmu, dan kamu menghentikan mereka dengan tower yang kamu tempatkan di build pad, lalu kamu tingkatkan dan jual. Setiap pelajaran menambahkan satu fitur. Semua dua belas skrip game sudah ada di proyek sejak awal; sebagian besar berupa stub singkat yang akan dilengkapi dalam pelajaran berikutnya.
Musuh mengikuti jalur melalui waypoint: GameObject kosong di sudut-sudut, yang disimpan dalam array sesuai urutan yang dilalui. Musuh menyimpan indeks waypoint yang ditujunya, bergerak ke arahnya, lalu beralih ke waypoint berikutnya saat tiba. Vector3.MoveTowards(current, target, maxStep) menggerakkan titik ke arah target paling jauh sejauh maxStep dan tidak pernah melewatinya, sehingga musuh mendarat tepat di waypoint dan == dapat mengetahui bahwa musuh telah tiba. Drone patroli ini terbang di antara pos-posnya dan kembali ke awal setelah pos terakhir:
public Transform[] posts;
public float speed = 3f;
private int current;
void Update()
{
Vector3 goal = posts[current].position;
transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
if (transform.position == goal)
{
current = (current + 1) % posts.Length;
}
}Musuh tidak melakukan perulangan: setelah waypoint terakhir, tidak ada lagi tempat untuk dituju. Setelah indeks mencapai Length, indeks itu tidak lagi menunjuk ke waypoint, dan membaca waypoints[waypoints.Length] akan memunculkan IndexOutOfRangeException, jadi indeks diperiksa sebelum digunakan. Waypoint berada 0.6 di atas tanah, setinggi bagian tengah musuh, sehingga berjalan lurus ke arahnya membuat kaki musuh tetap menyentuh tanah.
Tantangan
MudahGrunt berdiri di waypoint pertama, WP0, dan skrip Enemy-nya sudah memiliki delapan waypoint di waypoints, dari WP0 di titik spawn hingga WP7 di markas.
- Tambahkan
private intnext: indeks waypoint yang dituju Grunt. Grunt mulai di WP0, jadinextdimulai dari 1. - Di
Update, gerakkan Grunt menujuwaypoints[next]dengan kecepatanspeedunit per detik menggunakanVector3.MoveTowards. - Saat Grunt tiba di waypoint itu, arahkan ke waypoint berikutnya.
- Setelah waypoint terakhir, berhenti: jangan bergerak lagi dan jangan muncul error.
Tekan Play dan amati Grunt berjalan di sepanjang jalur, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Ikuti jalurnya di sini: dari satu waypoint ke waypoint berikutnya, secara berurutan.
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.