유니티 엔진 - 게임 프로젝트/타워 디펜스 게임

웨이브 시스템 - 2) 적의 이동 방식 개선

monstro 2026. 6. 16. 19:25
728x90
반응형

- 개요

적이 이동하기 위한 좌표 매니저 클래스가 아닌, 포탈이 설정하여 적에게 넘겨주는 방식으로 변경한다

또, 적이 좌표를 지나쳤다 다시 유턴하지 않고 바로 다음 좌표로 넘어가도록 개선한다

 

- 스크립트 작업

1) Waypoint 클래스

 

좌표를 지정하기 위한 Waypoint 클래스를 추가하고 좌표 오브젝트에 컴포넌트로 사용한다

 

2) Enemy_Portal 클래스

 

waypointsList 멤버변수를 추가하여 적이 이동할 경로 오브젝트를 저장한다

 

 

CollectWaypoints 함수를 위와 같이 정의한다

waypointsList 멤버변수를 초기화한 후에 자식 오브젝트를 순회하면서

Waypoint 컴포넌트를 가져와 waypoinstList 멤버변수에 저장한다

 

 

Awake 함수를 추가하고 CollectWaypoints 함수를 호출한다

 

 

SpawnProcess 함수에 위와 같이 로직을 추가하여

생성된 적의 SetupEnemy 함수를 호출하고 waypointsList 멤버변수를 인자로 넘겨준다

 

3) Enemy_Base 클래스

 

기존의 멤버변수의 이름을 수정하고 새로운 멤버변수를 추가한다

  • wayPoints 멤버변수를 myWaypoints 멤버변수로 교체
  • waypointIndex 멤버변수를 nextWaypointIndex 멤버변수로 교체
  • currentWaypointIndex 멤버변수를 추가

 

 

SetNextDestination 함수의 로직을 위와 같이 수정한다

다른 함수도 동일하게 waypoints 멤버변수를 myWaypoints 멤버변수로 교체하고,

waypointIndex 멤버변수를 nextWaypointIndex 멤버변수로 교체한다

로직을 추가하여 currentWaypointIndex 멤버변수의 값을 설정한다

 

 

InitializeEnemy 함수를 추가하고 위와 같이 구성한다

해당 함수를 호출하여 적의 기본값을 세팅하고, 다음 좌표로 이동하도록 설정한다

 

 

SetupEnemy 함수를 위와 같이 구성한다

매개변수로 받은 newWaypoints를 순회하면서 myWaypoints 멤버변수에 값을 저장하고

InitializeEnemy 함수를 호출하여 기본 설정을 진행한다

 

 

ShouldChangeWaypoint 함수를 추가하고 위와 같이 로직을 구성한다

적의 현재 위치에서 다음 좌표까지의 거리값현재 좌표에서 다음 좌표까지의 거리값을 비교한 결과를 반환한다

후자가 더 크면 현재 좌표를 다음 좌표로 전환하고, 전자가 더 크면 현재 좌표를 유지한다

 

 

Start 함수에서 InitializeEnemy 함수를 호출하여 적의 기본값을 설정한다

 

 

Update 함수에서 ShouldChangeWaypoint 함수를 호출하여 다음 좌표로 이동할지 판단한다

 

- 애셋 작업

1) WaveData 애셋

 

2개의 웨이브에서 1개의 웨이브로 축소하고 위와 같이 50 + 50개의 적을 스폰하도록 수정한다

 

- 최종 실행 결과

 

위와 같이 경로를 지나가지 못해도 바로 다음 경로로 이동하는 것을 확인할 수 있다

728x90
반응형