성공할 게임개발자

[크래프톤 정글 게임테크랩] 14주차 게임잼 본문

KJ

[크래프톤 정글 게임테크랩] 14주차 게임잼

fn000 2025. 12. 30. 10:21

https://www.youtube.com/watch?v=Rk1m5edAYic

 

안녕하세요. 오랜만에 글을 쓰는데요. 테크랩의 큰 분기 중 하나인 자체엔진을 마무리 지으면서 이 글을 쓰게 되었습니다.

 

테크랩에서 14주 동안 자체엔진을 만들고 4명이서 4.5일동안의 결과물이 저 게임입니다. 저 게임에는 14주 동안 배운 기술들이 들어갔고 잘 녹아냈다고 생각합니다. 

 

저는 기존에 소울라이크를 많이는 플레이해보지 않았지만 적당히는 즐겼다고 생각합니다. 그래서 여차저차 마지막 게임잼에서도 다들 뜻이 맞아 저희 팀은 소울라이크 게임을 만들기로 했었습니다.

 

저희팀은 플레이어(저) 보스(팀원1) 파티클 및 카메라 이펙트(팀원2) 맵 및 사운드(팀원3)로 역할 분담을 하였습니다. 

 

저희가 만든 게임은 개인적으로 시간대비 볼륨이 꽤 컸음에도 빠르게 작업을 할 수 있었던 주요한 이유는 에셋에 시간을 많이 쓰지않았기 때문이라고 생각합니다. 13주차 끝나자 마자 "야 4.5일 줄테니까 지금부터 새로운 팀원과 게임만들어! 시이작!" 이라는 상황이 주어지면 사실 생각하고 정리해야할게 정말 많습니다. 전 주차 누구의 엔진을 써야하나... 게임은 어떤 장르로 만들까... 에셋은 어디서 가져올까... 등등 시작부터 생각해야할게 정말 많습니다. 또한, 개발 중에 수시로 나타나는 버그는 6시간짜리 일수도 있고 12시간짜리 일수도 있고 10분짜리 일수도 있죠... 그만큼 그냥 힘듭니다.

 

 

빠르게 처리할 수 있었던 이유

1. 에셋 처리방식

감사하게도 팀원들이 저가 쓰던 엔진을 쓰자고 해서 저가 많은 주차 참여했던 엔진을 쓸 수 있었고 정확히는 과거에 FBX로드 주제부터가 저 엔진의 시작이었습니다. 당시에 저는 FBX Loader를 맡았었습니다. 그때 FBX로드를 하면서 스켈레탈 메쉬구조, 언리얼, 블렌더의 임포트 익스포트 방식, Bone Trasform 등을 FBX 맡았을 때 부터 "어떠한 외부 툴에서 FBX를 가져와도 이 엔진에서 쓸 수 있게 만들자"라는 마음으로 구현을 했었고 몰입했습니다. 

결과론적으로 엔진에서 구현한 FBX로더는 FAB의 에셋을 정확한 Transform으로 가져올 수 있었고(애니메이션 임포트, 스켈레탈 메쉬 임포트 등등) 모든 에셋을 기존의 언리얼프로젝트에서 빼와서 에셋걱정이 없었습니다. 그만큼 남는시간은 구현에 몰두할 수 있었죠. 하지만 가장 중요했던 점은 팀원 중 하나가 본인의 프로젝트(UE5)의 에셋을 저희 엔진에 가져왔을 때, 정상적으로 동작한다는 걸 시도했던 것 이었습니다. 사실 시도도 안해보면 이게 되는지 안되는지 알지 못하잖아요. 근데 결과적으로 팀원은 시도를 했고 그 덕이 컸습니다.

 

2. 병렬적으로 돌아가는 임무 분담. 병목없는 작업환경

다들 아시겠지만 이 부분도 중요한데요. 제한된 시간내에서 완성도있는 결과물을 내려면 팀원들이 맡고있는 일의 의존성을 줄여야 합니다. 예를들어 A팀원의 테스크를 끝내야 B팀원의 테스크를 시작할 수 있는 환경을 최대한 피해야합니다. 그냥 글로만 봐도 답답하죠? 답답해하는 와중에도 시간은 가고있습니다. 틱톡틱톡... 따라서 이걸 피하기 위해서 의존성을 최소화한 업무 분담을 하였습니다. 

 

3. 열심히 했다.

사실 양치기보다 위대한건 없습니다. 그냥 게임잼 기간에는 죽었다 생각하고 잠 줄여가면서 게임만들었던게 중요한 요소였던거 같습니다.

 

 

내가 맡은 내용 : 플레이어

저는 플레이어를 맡았었는데요. 플레이어의 로직을 빠르게 정리할 수 있었던건 다음과 같습니다.

 

1. 플레이어 행동의 명확한 정의: 애님 스테이트와 몽타주 그리고 BlendSpace2D

플레이어 애님 스테이트

 

우선 애님 스테이트인데요. 노드와 핀이 더러운건 죄송합니다. 하지만 아시는분들은 아실 언리얼엔진의 애님스테이트를 BP로 구현한 것입니다. 이 블루프린트는 원래 없는 기능인데, FBX 주차 때 같은 팀에 코딩을 엄청 잘하는 팀원이 언리얼 경험이 많이 없었음에도 불구하고 그냥 뚝딱 만들어서 놀랐었습니다. 저는 언리얼을 써본경험이 있어서 이걸 활용해 에셋에서 가져온 플레이어 이동, 점프등의 기본적인 로직을 linear하게 Blend처리해 구현했습니다. 그 후... 

 

BlendSpace2D는 제가 구현하여 요긴하게 써먹었습니다.(진짜 최소 기능만 구현함.. 시간이 없었음) 쉽게 설명하면, 우선 입력으로 Local Velocity(X,Y)를 받아와서 2차원 좌표계의 값으로 쓰고, 보시다시피 17개의 애니메이션 행렬를 좌표계에 셋합니다.(이건 마음대로 셋할 수 있음.. 갯수나.. 위치나..) 그러면  입력으로 들어오는 한점(X, Y)은 반드시 삼각형안으로 들어오게되는데(라인에 걸칠 때는 예외처리함) 이걸 바리센트릭 좌표계를 사용해서 3개의 애니메이션 행렬을 보간하여 BlendSpace2D를 구현하였습니다.  그 후..

 

 

 

 

 

또한, 몽타주를 구현하여 효율적으로 플레이어 행동 로직을 구현할 수 있었습니다. 이것또한 언리얼의 몽타주와 유사한 개념인데요. 몽타주는 쉽게말하면 "애니메이션 인터럽트" 입니다. 예를들어서 'q' 키를 누르면 애니메이션이 나가게 하고싶다... 라면 이러한 상황인겁니다.

 

 

그림으로 표현해보았는데요. 설명을 덧붙히자면, anim state machine은 계속 진행되는 루프입니다. 일상생활에서 저희는 숨을 쉬고.. 걷고... 점프하고.. 이런거죠. 그냥 "지속적으로 진행되어야하는 행동" 을 정의해둔 거라 생각하면 됩니다. 이 상황에서 'q' 키를 누르면 물구나무를 서게하고싶다면(이건 특수한 상황이죠 보통) 인터럽트를 걸고(트리거는 'q'키) anim montage를 통해 현재 상태를 덮어쓰기 하면 되는겁니다. 곧바로 넘어가면 뚝 뚝 끊키는 느낌이 있으니까 또 linear하게 blend하고요.

 

여튼 이런식으로 효율적으로 애니메이션을 추가할 수 있었고 다양한 공격을 셋할 때에도 그냥 짜여져있는 구성에 몽타주 딸깍 하면 되는 상황이었다 이겁니다. 이 방식으로 플레이어의 다양한 행동을 구현할 수 있었습니다.

 

 

글을 쓰다 보니까 너무 자세하게 적는거 같네요.. 귀찮아서 그런건아니고 글이너무 길어지니까 이외에도 구현한걸 말하자면 

스프링 암, 루트모션, Nvidia Physics를 이용해 Sweep 충돌처리. Ragdoll(Physics Asset -> Bone Collider, Constraint), Kinematic Physics, Lockon 등등.. 입니다.

 

 

 

사실 이 게임의 진짜 강점은 파티클과 감마보정 그리고 메탈릭 처리 등 환경적 요소입니다. 정말 저는 구현하면서 떼깔이 좋다고 생각했습니다(플스게임 보는 줄 알았어요). 정말 훌륭해요..

게임잼 중에 이거 적용해보자하고 구현하고... 진짜 되는거 보고 이게되네? 하고 했던 기억이 너무 좋았고 끝나고보니 개발이 좋았던 주차였던거 같습니다. 

'KJ' 카테고리의 다른 글

[크래프톤 정글 게임테크랩] 2기 합격 후기  (10) 2025.08.20