경유 지점
Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 1번째.
이 과정에서는 타워 디펜스 게임을 만듭니다. 적들은 웨이브를 이루어 경로를 따라 기지로 진격하고, 여러분은 건설 패드에 타워를 배치한 다음 업그레이드하거나 판매해 적을 막습니다. 각 수업에서는 기능을 하나씩 추가합니다. 게임의 스크립트 12개는 모두 처음부터 프로젝트에 들어 있으며, 대부분은 이후 수업에서 내용을 채워 넣을 짧은 스텁입니다.
적은 웨이포인트를 따라 경로를 이동합니다. 웨이포인트는 모퉁이에 있는 빈 GameObject이며, 적이 지나가는 순서대로 배열에 들어 있습니다. 적은 향하는 웨이포인트의 인덱스를 유지하고, 그 지점으로 이동한 뒤 도착하면 다음 지점으로 넘어갑니다. Vector3.MoveTowards(current, target, maxStep)는 점을 목표 지점 방향으로 최대 maxStep만큼 이동시키며 목표 지점을 지나치지 않으므로, 적은 웨이포인트에 정확히 도착하고 ==로 도착 여부를 확인할 수 있습니다. 이 순찰 드론은 초소 사이를 날아다니며 마지막 초소 이후에는 처음부터 다시 시작합니다.
public Transform[] posts;
public float speed = 3f;
private int current;
void Update()
{
Vector3 goal = posts[current].position;
transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
if (transform.position == goal)
{
current = (current + 1) % posts.Length;
}
}적은 경로를 반복하지 않습니다. 마지막 웨이포인트 이후에는 더 갈 곳이 없습니다. 인덱스가 Length에 도달하면 더 이상 웨이포인트를 가리키지 않으며, waypoints[waypoints.Length]를 읽으면 IndexOutOfRangeException이 발생하므로 인덱스를 사용하기 전에 확인합니다. 웨이포인트는 지면에서 0.6 높이, 즉 적 중심의 높이에 놓여 있으므로, 웨이포인트를 향해 똑바로 걸어가도 발이 지면에 닿아 있습니다.
챌린지
쉬움Grunt는 첫 번째 웨이포인트인 WP0에 서 있으며, Enemy 스크립트에는 스폰 지점의 WP0부터 기지의 WP7까지 8개의 웨이포인트가 이미 waypoints에 있습니다.
- private int
next를 추가하세요. Grunt가 향하는 웨이포인트의 인덱스입니다. Grunt는 WP0에서 시작하므로next는 1에서 시작합니다. Update에서Vector3.MoveTowards를 사용해 초당speed단위의 속도로 Grunt를waypoints[next]쪽으로 이동시키세요.- 해당 웨이포인트에 도착하면 다음 웨이포인트로 향하게 하세요.
- 마지막 웨이포인트를 지나면 멈추세요. 더 이상 이동하지 않고 오류도 없어야 합니다.
Play를 눌러 Grunt가 경로를 따라 걷는 모습을 확인한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// 여기서 경로를 따라 이동하세요: waypoint에서 다음 waypoint로 순서대로 이동합니다.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.