Tembak
Pelajaran 9 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.
Sebuah menara menembak targetnya sebanyak fireRate kali per detik. Alih-alih menggunakan timer yang menghitung mundur, menara menyimpan waktu tembakan berikutnya: saat Time.time telah mencapai waktu tersebut, menara menembak dan memajukannya sebesar 1f / fireRate detik. Sebuah sprinkler yang menyemprot dua kali per detik:
if (Time.time >= nextSpray)
{
Spray();
nextSpray = Time.time + 1f / spraysPerSecond;
}Setiap tembakan adalah sebuah Projectile yang terbang menuju targetnya dengan MoveTowards, mengikutinya saat berjalan, lalu melukainya saat tiba. Tembakan itu tidak perlu tahu bahwa targetnya adalah Enemy: tembakan tersebut meminta IDamageable dari target, yaitu interface untuk apa pun yang bisa menerima kerusakan, seperti yang dijelaskan dalam bab Interfaces, sehingga apa pun yang mengimplementasikannya bisa ditembak.
Target bisa mati saat tembakan masih di udara, dijatuhkan oleh tembakan menara lain. target tembakan itu kemudian dianggap sama dengan null, seperti semua object Unity yang dihancurkan, dan tembakan itu tidak punya tujuan lagi, jadi tembakan itu menghancurkan dirinya sendiri.
Tantangan
SedangIDamageablemendeklarasikanvoid TakeDamage(int amount). BuatEnemymengimplementasikannya: jumlahnya dikurangi dari health, dan saat health 0 atau kurang, enemy dihancurkan.- Di
Projectile, tambahkan floatspeedyang diserialisasi (prefab menetapkan nilai 12) danpublic void Launch(Transform target, int damage), yang menyimpan keduanya. DiUpdate, gerakkan projectile menuju target dengan kecepatanspeed; saat tiba, panggilTakeDamage(damage)pada IDamageable milik target, lalu hancurkan projectile. Jika target sudah tidak ada, hancurkan projectile. - Di
Tower, tambahkan int publikdamage, float publikfireRate(tembakan per detik), danprojectilePrefabyang diserialisasi (sebuah Projectile). Selama tower memiliki target, tembak paling banyakfireRatekali per detik: buat instance projectile sedikit di depan head, pada posisihead.position + head.forward * 0.6f, lalu luncurkan ke arah target dengan damage milik tower.
Prefab ArrowTower menetapkan damage sebesar 2 dan fireRate sebesar 1.5, dan projectile-nya adalah ArrowShot. Tekan Play, bangun tower dan hentikan wave pertama, lalu tekan Check.
Coba sendiri
using UnityEngine;
// Akan dibuat nanti: proyektil yang terbang dari menara menuju sasarannya.
public class Projectile : MonoBehaviour
{
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.