Bidik
Pelajaran 8 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.
Sebuah menara berputar menghadap targetnya: bukan seluruh menara yang berdiri di alasnya, melainkan kepalanya, sebuah object anak yang membawa laras. Memutar object anak akan memutar semua yang berada di bawahnya dan membiarkan induknya tetap seperti semula.
Musuh berjalan lebih rendah daripada kepala menara, jadi arah dari kepala menuju musuh sedikit mengarah ke bawah, dan kepala yang menghadap lurus ke arah itu akan condong ke depan. Mengatur nilai y arah tersebut menjadi 0 membuatnya tetap mendatar, sehingga kepala hanya berputar pada sumbu vertikal. Lampu mercusuar yang mengikuti kapal:
Vector3 toShip = ship.position - lamp.position;
toShip.y = 0f;
lamp.rotation = Quaternion.LookRotation(toShip);Quaternion.LookRotation(direction) adalah rotasi yang menghadap ke arah tersebut, jadi lampu langsung menghadap kapal. Kepala menara sebaiknya berputar dengan kecepatan tertentu: Quaternion.RotateTowards(from, to, maxDegrees) dari bab Rotation memutar paling banyak maxDegrees, dan kecepatan putar dalam derajat per detik dikalikan Time.deltaTime menghasilkan jatah putaran untuk setiap frame.Tantangan
Sedang- Di
Tower, tambahkan dua field terserialisasi:head(sebuah Transform) danturnSpeed(float, derajat per detik). Prefab ArrowTower menetapkan child ArrowHead dan nilai 270. - Saat tower memiliki target, putar head ke arahnya, hanya pada sumbu vertikal, paling banyak
turnSpeedderajat per detik. - Jika tidak ada target, biarkan head seperti semula.
Tekan Play, bangun tower di samping jalur dan lihat tower mengikuti musuh, lalu tekan Check.
Coba sendiri
using UnityEngine;
public class Tower : MonoBehaviour
{
public int cost = 50;
public float range = 4f;
private Enemy target;
void Update()
{
target = FindTarget();
}
Enemy FindTarget()
{
Enemy nearest = null;
float nearestDistance = range;
foreach (Enemy enemy in Enemy.All)
{
float distance = Vector3.Distance(transform.position, enemy.transform.position);
if (distance <= nearestDistance)
{
nearest = enemy;
nearestDistance = distance;
}
}
return nearest;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.