Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang
  1. IDamageable mendeklarasikan void TakeDamage(int amount). Buat Enemy mengimplementasikannya: jumlahnya dikurangi dari health, dan saat health 0 atau kurang, enemy dihancurkan.
  2. Di Projectile, tambahkan float speed yang diserialisasi (prefab menetapkan nilai 12) dan public void Launch(Transform target, int damage), yang menyimpan keduanya. Di Update, gerakkan projectile menuju target dengan kecepatan speed; saat tiba, panggil TakeDamage(damage) pada IDamageable milik target, lalu hancurkan projectile. Jika target sudah tidak ada, hancurkan projectile.
  3. Di Tower, tambahkan int publik damage, float publik fireRate (tembakan per detik), dan projectilePrefab yang diserialisasi (sebuah Projectile). Selama tower memiliki target, tembak paling banyak fireRate kali per detik: buat instance projectile sedikit di depan head, pada posisi head.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
{
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Tower Defense