Fab 링크 : PlatformFighterStarterKit
이번 프로젝트는 템플릿이 주어져있는 멀티플레이어 게임 만들기. 회의 결과 우리 조는 이 템플릿을 최대한 살리기로 했다. 그 중에서 내가 맡은 파트는 AI였다. 컴포넌트로 작동하는
BPC_AI
를 분석하고, 추가로 싱글 플레이의 보스 캐릭터를 추가하는 것이 역할이었다.결과적으로 템플릿 분석은
BPC_AI
만 분석한다고 되는 것은 아니었다. 보스의 기술 사용을 위해BPC_Ability
,BP_BaseAbility
,BP_Fighter
의 흐름 전반을 알아야 해서 결국 전체적으로 분석해야만 했다.이 포스팅 시리즈에선 템플릿 분석은 다루지 않고(Figma에 따로 정리해두었음) 보스 캐릭터를 어떻게 구상하고만드는 과정에 대해서만 다룰 예정이다.
템플릿 분석
체력에 따른 페이즈 구분
을 빼면 대체로 구상한대로 완성하게 되었다.음식 발사
, 수평 돌진
, 수직 찍기
, 박수
를 정해진 확률에 따라 무작위로 사용한다.무작위 패턴 사용
- 보스의 틱인
BossUpdate()
에는Switch on Int
노드가 걸려있다. 0부터 8까지 무작위 정수를 생성하여 나온 결과에 따라 패턴을 사용하는데, 이때 패턴과 연결된 핀의 개수로 패턴의 발동 확률을 조절하였다.
패턴을 사용하지 않을 때는 왼손/오른손 구분에 따라 플레이어의 Y좌표 ± 500
만큼 떨어진 위치에서 대기한다.
템플릿에서 상당히 많은 부분을 틱함수에서 처리하고 있었는데, 여기에서 착안해 대기 패턴도 보스의 틱함수 BossUpdate()
에 걸어 AddActorWorldOffset
노드로 위치를 정하게 했었다.
그러나 개발 과정에서 BossUpdate()
가 좀 더 고도화, 정밀화 되길 원했기 때문에 이동을 틱에서 연달아 호출하지 않고 한 번만 호출하면 따로 중지하기 전까지 계속 실행되도록 따로 리팩토링하였다.
위가 그 결과이다. StayAroundTarget()
은 호출되면 목표로 하는 위치에서 손의 현재 위치를 빼고, 정규화해서 방향 벡터를 구한다. 여기에 MultiplyNormal
을 곱해서 손의 이동 속도를 조절한다.
기존에는 이 StayAroundTarget()
이 매 프레임 호출되었던 것이 리팩토링 하며 아래와 같이 바뀌었다.
StayAroundTarget()
를 아주 짧은 초마다 계속 호출하도록 하며, 타이머 핸들도 설정하여 StopStayAround()
로 원할 때 멈출 수 있도록 한다.Max Once Per Frame
을 체크하는 것을 잊으면 안된다. 프레임당 최대 한 번만 호출되도록 하여 이동속도가 과도하게 빨라지는 것을 방지하여야 한다.