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

데미지 시스템 - 1) 적 추적 방식 개선

monstro 2026. 6. 1. 15:52
728x90
반응형

- 개요

기존의 랜덤한 적을 추적하는 방식이 아닌

일반적인 RTS 게임의 유닛처럼 가장 앞에 위치한 적을 추적하여 공격하도록 개선한다

또, 인터페이스를 추가하여 상속받은 객체들이 피해를 입도록 설정한다

 

- 스크립트 작업

1) IDamageable 인터페이스

 

IDamageable 인터페이스를 정의한다

해당 인터페이스를 상속받은 객체는 TakeDamage 순수가상함수를 오버라이드하여 피해를 입도록 설정한다

 

2) Enemy_Base 클래스

 

적의 조상 클래스에 위와 같이 멤버변수를 추가한다

  • totalDistance 멤버변수 : 이동할 좌표끼리의 거리의 총합
  • healthPoints 멤버변수 : 적의 체력

 

 

OnDestroy 함수를 오버라이드하여 오브젝트가 파괴되면 UnityEvent 변수에 바인딩된 콜백함수를 전부 제거한다

 

 

TakeDamage 함수를 오버라이드하여 피해를 입으면 체력을 감소시키고

체력이 0 이하로 떨어지면 게임 오브젝트를 파괴한다

 

 

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

적이 이동할 전체 경로총 직선 길이를 미리 더해서 totalDistance 변수에 저장한다

 

 

GetDistanceToEndPoint 함수를 추가하여 위와 같이 정의한다

해당 함수는 외부에서 호출하여 적의 위치에서 최종 목적지까지 실시간으로 남은 거리를 반환한다

값이 작을수록 우선적으로 공격할 대상이 된다

 

 

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

이동할 다음 좌표를 설정하면서 totalDistance 변수의 값을 갱신한다

 

3) Player_TowerBase 클래스

 

함수의 이름을 변경하여 FindAdvancedEnemy 함수로 수정한다

인접한 적들 중에서 랜덤한 적을 반환하는 로직이 아닌, 최종 목적지에 가까운 적을 반환하도록 로직을 변경한다

 

 

Update 함수에서 FindAdvancedEnemy 함수를 호출하도록 수정한다

 

4) Player_TowerCrossbow 클래스

 

damageAmount 멤버변수를 추가하여 석궁 타워 유닛의 데미지를 설정한다

 

 

Attack 함수에 위와 같이 로직을 추가하여 Raycasting된 적으로부터

TakeDamage 함수를 호출하여 적에게 피해를 주도록 설정한다

 

- 최종 실행 결과

728x90
반응형