Menu
CoddyTech

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

Tantangan

Sedang
  1. Di Tower, tambahkan dua field terserialisasi: head (sebuah Transform) dan turnSpeed (float, derajat per detik). Prefab ArrowTower menetapkan child ArrowHead dan nilai 270.
  2. Saat tower memiliki target, putar head ke arahnya, hanya pada sumbu vertikal, paling banyak turnSpeed derajat per detik.
  3. 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;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Tower Defense