Menu
CoddyTech

조준

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 8번째.

포탑이 목표물을 향해 돌아섭니다. 받침대 위에 서 있는 포탑 전체가 아니라 포신을 지닌 자식 오브젝트인 포탑 머리가 돌아섭니다. 자식 오브젝트를 돌리면 그 아래의 모든 오브젝트가 함께 돌아가고 부모 오브젝트는 그대로 유지됩니다.

적은 포탑 머리보다 아래쪽으로 이동하므로 포탑 머리에서 적을 향하는 방향은 약간 아래를 가리킵니다. 그 방향을 따라 똑바로 바라보도록 하면 포탑 머리가 앞으로 기울어집니다. 방향의 y를 0으로 설정하면 수평을 유지하므로 포탑 머리는 수직축을 중심으로만 회전합니다. 배를 따라가는 등대의 조명은 다음과 같습니다.

Vector3 toShip = ship.position - lamp.position;
toShip.y = 0f;
lamp.rotation = Quaternion.LookRotation(toShip);
Quaternion.LookRotation(direction)은 해당 방향을 바라보는 회전이므로 조명은 즉시 배를 향합니다. 포탑 머리는 일정한 속도로 돌아야 합니다. Rotation 장에서 배운 Quaternion.RotateTowards(from, to, maxDegrees)는 최대 maxDegrees만큼 회전하며, 초당 회전 각도에 Time.deltaTime을 곱하면 각 프레임에서 회전할 양을 구할 수 있습니다.
challenge icon

챌린지

중급
  1. Tower에 직렬화된 필드 두 개를 추가하세요: head(Transform)와 turnSpeed(초당 각도). ArrowTower 프리팹에서 ArrowHead 자식 오브젝트와 270을 지정하세요.
  2. 타워에 타깃이 있는 동안, 수직 축을 기준으로만 헤드를 타깃 방향으로 초당 최대 turnSpeed도 회전시키세요.
  3. 타깃이 없으면 헤드를 현재 상태로 두세요.

Play를 누르고, 경로 옆에 타워를 건설해 적들을 따라가는 모습을 확인한 다음 Check를 누르세요.

직접 해보기

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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 타워 디펜스의 모든 레슨