멈추지 않고 끈질기게

[포트폴리오] 언리얼 팀 프로젝트 회고(2차) 본문

포트폴리오

[포트폴리오] 언리얼 팀 프로젝트 회고(2차)

sam0308 2024. 7. 4. 10:14

※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다.

 

※ 해당 포스팅은 청년취업사관학교 교육과정 중에 진행한 언리얼 팀 프로젝트에 관한 회고록입니다. 

 

※ 해당 포스팅은 Unreal 5.3.1 버전을 기준으로 작성되었습니다.

 

 

 

 원래 프로젝트 종료 시점마다 작성하려고 했던 회고록인데, 최종 프로젝트 시작하고 정신이 쏠려서 많이 늦어지고 말았습니다. 이미 최종 프로젝트까지 끝나긴 했지만, 지금까지의 교육 기간을 되돌아보는 차원에서라도 계속 작성할 예정입니다.

 

1. 프로젝트 소개

 2차 프로젝트는 GTA5의 정보국 습격 미션을 카피캣한 액션 어드벤처 게임입니다. 원작은 오픈월드로 하나의 레벨에서 진행되지만, 프로젝트 기간을 고려하여 정보국 잠입 전, 정보국 잠입 후, 테러 후 탈출의 3단계로 나누어 3개의 레벨로 구성하였습니다. 3인팀으로 진행하였으며, 저는 1번째 레벨의 디자인 및 행인의 행동패턴, 그리고 3번째 레벨을 맡았습니다. 

 

 행인은 일반 행인과 정보국 요원 2종류로 구분되며, 일반 행인은 지정된 구역을 반복적으로 이동하다가 플레이어에게 피격된 후, 플레이어를 추격하며 근접공격합니다. 정보국 요원은 공격받기 전 까지는 전화를 받고 있으며, 피격 후 행동 패턴은 일반 행인과 동일하나 체력이 일정 수치 아래로 내려가면 총을 꺼내서 사격하도록 했습니다. 

 

 해당 프로젝트 깃허브 주소 및 소개 영상 주소입니다.

https://github.com/pkh0308/P2J

 

GitHub - pkh0308/P2J: GTA Reference project

GTA Reference project. Contribute to pkh0308/P2J development by creating an account on GitHub.

github.com

https://youtu.be/E5fLeZ1LuPk

 

 

 

 

2. 잘된 점 

 행인의 행동 패턴을 구현하는 데 어떤걸 사용할지 고민하다가 BehaviorTree(이하 BT)를 사용하였는데, 도중에 살짝 헤매기도 했지만 결과적으로는 잘 구현된거 같아 만족스러웠습니다. 평상시에는 일정 구간을 걸어다니다가 피격 당하는 순간 플레이어를 쫓아가서 공격하는 단순한 패턴이었지만, 나름대로 Task도 직접 작성하고 행인의 class와 animation nofity등과 연계하여 원하던 동작을 구현하는 데 성공했습니다.

 

 또한 3번째 레벨에서 프레임 드랍이 꽤 심하게 발생하여 30대까지 떨어지곤 했는데, 결국 실내 조명으로 배치한 Point Light들이 가장 큰 원인이었음을 찾아내고 범위를 최대한 조절하여 60프레임을 유지시키는데 성공했습니다. 해당 과정에서 나이아가라의 Spawn Rate 등을 조절하거나 Geometry 기능으로 제작한 건물 외곽, 계단 난간 등을 Combine Mesh로 하나의 메시로 합치는 등 최적화에 관한 팁을 얻기도 했습니다. 

사진 1. 프레임 개선(Point Light - Attenuation Radius 조절)

 

 

3. 아쉬운 점

 다소 아쉬웠던 점은 레벨 시퀀스를 완벽하게 활용하지 못했던 점입니다. 원작 특성상 시퀀스를 사용할만한 상황이 많아서 대여섯개 정도 제작하여 배치했었는데, 시퀀스가 끝난 타이밍에 실행되어야 할 내용을 그냥 WorldTimerManager를 통해 시퀀스의 길이만큼 딜레이를 주고 실행하는 식으로 해결하였습니다. 원래 ULevelSequencePlayer의 OnFinished 델리게이트를 통해 종료 시점에 호출될 내용을 등록하고 실행되도록 할 수 있는 것으로 보이는데, 해당 델리게이트에 등록한 내용이 종료 시점에 실행되지 않는 이슈가 있었습니다. 검색해보니 그냥 언리얼 엔진 자체의 이슈라는 얘기도 있긴 했는데, 개발 기간이 얼마 남지 않아 그냥 타이머로 처리하고 넘어갔었습니다. 추후에라도 로그를 찍어보면서 왜 호출되지 않는 것인지 좀 더 확인해보아야겠습니다. 

 

사진 2. ULevelSequencePlayer의 OnFinished 델리게이트

 

 

4. 소감

 이번 프로젝트는 진행하면서 유니티에서 사용해보지 않은 툴을 다수 사용해 본 점에서 의미있는 프로젝트였습니다. 레벨 디자인을 하면서 레벨 시퀀스를 이용한 시네마틱 연출을 다수 사용해보게 되었고, BT를 통해 행동패턴을 짜면서 NPC의 행동패턴을 구현하는 방식에 대해 좀 더 공부하게 되었습니다. 기존에는 FSM을 이용한 방식만 써봤었는데, 언리얼 엔진의 BT를 사용해보니 FSM을 좀 더 시각적으로 보고 이해할 수 있었습니다. 특히 행동 패턴에 관하여 디버깅 할 때, 직접 창을 열어놓고 어느 Task에서 어떻게 넘어가는지 눈으로 확인하여 원인을 찾아 보니 상당히 편리했습니다.

사진 3. 실행중인 BT의 Task 확인

 

  그리고 처음으로 플레이어 외 구현만 담당해보았던 것도 의미가 컸습니다. 지금까지 1인 프로젝트를 진행할 때는 당연히 플레이어 및 주요 기능을 전부 직접 구현했었고, 1차 프로젝트 때도 플레이어를 맡아서 비슷했었습니다. 허나 이번에는 행인과 레벨 디자인, 시퀀스 등 다소 부가적인 기능들만 구현하다보니 개발 일정에 대해 살짝 불안한 마음이 있었습니다. 하지만, 덕분에 테스트용 플레이어를 빠르게 만들어서 사용해보는 경험도 해 보았고, 결국에는 팀원 분께서 구현한 플레이어로 처음부터 끝까지 플레이가 잘 되는 것을 확인하고 나서 팀원을 신뢰하는 것도 중요하다는 것을 느꼈습니다. 게임 장르 면에서나 맡은 역할 면에서나 다소 생소했지만, 그래서 팀 프로젝트를 진행하는 자세에 대해 더 성숙할 수 있었던 것 같습니다.

 

 이번 프로젝트는 특히나 1차때에 비해 기간도 짧고 중간에 설 연휴도 끼어있어 일정이 많이 촉박했는데, 끝까지 맡은 바 역할을 수행하여 프로젝트를 완성시킬 수 있도록 노력해주신 팀원분들께 감사의 말씀을 올립니다.