조준
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을 곱하면 각 프레임에서 회전할 양을 구할 수 있습니다.챌린지
중급Tower에 직렬화된 필드 두 개를 추가하세요:head(Transform)와turnSpeed(초당 각도). ArrowTower 프리팹에서 ArrowHead 자식 오브젝트와 270을 지정하세요.- 타워에 타깃이 있는 동안, 수직 축을 기준으로만 헤드를 타깃 방향으로 초당 최대
turnSpeed도 회전시키세요. - 타깃이 없으면 헤드를 현재 상태로 두세요.
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;
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.