[UE5] 보스 캐릭터 만들기 (1)

재석 블로그·2025년 4월 18일
0

FoodRumble 개발일지

목록 보기
1/3

들어가며

Fab 링크 : PlatformFighterStarterKit

이번 프로젝트는 템플릿이 주어져있는 멀티플레이어 게임 만들기. 회의 결과 우리 조는 이 템플릿을 최대한 살리기로 했다. 그 중에서 내가 맡은 파트는 AI였다. 컴포넌트로 작동하는 BPC_AI를 분석하고, 추가로 싱글 플레이의 보스 캐릭터를 추가하는 것이 역할이었다.

결과적으로 템플릿 분석은 BPC_AI만 분석한다고 되는 것은 아니었다. 보스의 기술 사용을 위해 BPC_Ability, BP_BaseAbility, BP_Fighter의 흐름 전반을 알아야 해서 결국 전체적으로 분석해야만 했다.

이 포스팅 시리즈에선 템플릿 분석은 다루지 않고(Figma에 따로 정리해두었음) 보스 캐릭터를 어떻게 구상하고만드는 과정에 대해서만 다룰 예정이다.

템플릿 분석

피그마 링크 바로가기





보스 설계하기

  • 피그마를 이용해 간단하게 구상을 해보았다.
  • 레퍼런스, 패턴, 구현 예상 정도만 작성해보았는데, 패턴같은 경우 체력에 따른 페이즈 구분을 빼면 대체로 구상한대로 완성하게 되었다.
  • 패턴은 총 4개로 음식 발사, 수평 돌진, 수직 찍기, 박수 를 정해진 확률에 따라 무작위로 사용한다.

    무작위 패턴 사용

    • 보스의 틱인 BossUpdate()에는 Switch on Int 노드가 걸려있다. 0부터 8까지 무작위 정수를 생성하여 나온 결과에 따라 패턴을 사용하는데, 이때 패턴과 연결된 핀의 개수로 패턴의 발동 확률을 조절하였다.

Idle 상태일 때 대기

  • 패턴을 사용하지 않을 때는 왼손/오른손 구분에 따라 플레이어의 Y좌표 ± 500 만큼 떨어진 위치에서 대기한다.

  • 템플릿에서 상당히 많은 부분을 틱함수에서 처리하고 있었는데, 여기에서 착안해 대기 패턴도 보스의 틱함수 BossUpdate()에 걸어 AddActorWorldOffset 노드로 위치를 정하게 했었다.

  • 그러나 개발 과정에서 BossUpdate()가 좀 더 고도화, 정밀화 되길 원했기 때문에 이동을 틱에서 연달아 호출하지 않고 한 번만 호출하면 따로 중지하기 전까지 계속 실행되도록 따로 리팩토링하였다.

  • 위가 그 결과이다. StayAroundTarget()은 호출되면 목표로 하는 위치에서 손의 현재 위치를 빼고, 정규화해서 방향 벡터를 구한다. 여기에 MultiplyNormal을 곱해서 손의 이동 속도를 조절한다.

  • 기존에는 이 StayAroundTarget()이 매 프레임 호출되었던 것이 리팩토링 하며 아래와 같이 바뀌었다.

  • 타이머를 만들어서 타이머가 StayAroundTarget()를 아주 짧은 초마다 계속 호출하도록 하며, 타이머 핸들도 설정하여 StopStayAround()로 원할 때 멈출 수 있도록 한다.
  • 이때 Max Once Per Frame을 체크하는 것을 잊으면 안된다. 프레임당 최대 한 번만 호출되도록 하여 이동속도가 과도하게 빨라지는 것을 방지하여야 한다.
profile
게임 개발자 재석의 블로그입니다.

0개의 댓글