멈추지 않고 끈질기게

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

포트폴리오

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

sam0308 2024. 4. 23. 21:17

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

 

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

 

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

 

 

 언리얼 팀 프로젝트(1차) 완료 후 작성하는 회고록입니다. 사실 프로젝트 종료 직후에 적었어야 했는데, 프로젝트 종료 후에 바로 다음 프로젝트 이어가고 하다보니 좀 밀렸습니다. 2차, 3차도 시간 나는대로 이어서 작성하도록 하겠습니다.

 

1. 프로젝트 소개

 1차 프로젝트는 'Left 4 Dead'를 카피캣한 좀비 서바이벌 FPS 게임입니다. 2인 팀으로 진행하였으며, 저는 플레이어 및 UI를 담당하였습니다. 1차 프로젝트라 복잡한 로직보다는 이동, 사격 등 주요 기능을 디테일하게 살리는 방향으로 제작하였습니다. 

 

 

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

 

https://github.com/jwk0495/TeamProject_Left4Dead_Map_Zpmbie

 

GitHub - jwk0495/TeamProject_Left4Dead_Map_Zpmbie

Contribute to jwk0495/TeamProject_Left4Dead_Map_Zpmbie development by creating an account on GitHub.

github.com

https://youtu.be/o6zd8LTVeUo

 

 

 

2. 잘된 점

 플레이어를 제작하면서 가장 신경 쓴 부분이 사격하는 느낌을 제대로 주는가 하는 부분이었는데, 이 부분은 나름대로 잘 구현된거 같아서 만족스러웠습니다. 총기 반동과 연사할수록 낮아지는 정확도, 그리고 이에 따른 크로스에임 벌어짐 등을 구현하고 나서 플레이해보니 꽤 FPS 느낌이 났고, 팀원 분도 긍정적으로 반응해주셔서 더욱 의욕을 낼 수 있었습니다.

사진 1. 크로스헤어 벌어짐 + 머즐 플래시

 

 

 또한 당시에 저는 C++, 팀원 분은 블루프린트로 작업하다보니 겪은 이슈도 있었는데, 당시에 배운 블루프린트 한정자를 사용하여 잘 해결하였던 점은 좋은 기억으로 남아있습니다. 플레이어의 공격 로직을 짜다보니 C++ 스크립트에서 좀비의 클래스로 캐스팅 할 필요가 있는데, 좀비가 베이스가 되는 C++ 클래스 없이 아예 블루프린트로 만들어져서 다소 난감한 상황이었습니다. 그래서 액터를 상속받은 좀비의 베이스 클래스를 생성하고, 좀비의 사망 로직만 BlueprintImplementableEvent 로 작성해 둔 다음에 팀원 분에게 요청하여 좀비들의 부모 클래스를 변경하는 식으로 해결하였습니다. 처음으로 겪은 언리얼 특유의 이슈였는데, 큰 트러블 없이 합리적으로 해결하여 뿌듯했던 기억이 납니다.

 

 

 

3. 아쉬운 점

 가장 아쉬웠던 점은 아무래도 에임 오프셋의 완성도였습니다. 최대한 자연스럽게 만들기 위해 몇번을 조정했는데도, 시점을 아래로 두거나 위로 올리면 왼손과 총이 떨어져서 부자연스러운 모습들이 노출되었습니다. 에임 오프셋 때문에 Mixamo에서 받은 메시들도 포기하고 기본 마네킹을 이용했는데, 결국 마지막까지 만족스럽게 수정하지 못했습니다. 나중에 가서 Transform Born이라는 다른 선택지를 알게 되었는데, 개인적인 체감으로는 이쪽이 좀 더 편리해서 다음에는 Transform Born 을 이용해서 구현해보기로 했습니다.

사진 2. 에임 오프셋 이슈

 

 추가로 밀치기 공격을 구현은 했었는데, 좀비의 이동 방식이랑 충돌이 있어 간헐적으로 제대로 밀려나지 않는 이슈가 남아있었습니다. 좀비가 MoveAI 방식으로 이동하다보니, 밀치는 직후에 해당 함수에서 목표 위치를 갱신하면 밀치는 부분이 덮어씌워지는 것으로 보였습니다. 밀치기 공격을 AddForce, AddImpulse 등 여러가지 함수로 시도해 보았는데, 결국 마지막까지 완전히 해결하지는 못했습니다. 당시에는 CharacterMovementComponent를 이용한 방법은 시도해보지 않아서, 추후에는 해당 방법으로 구현해보기로 했습니다.

 

 

4. 소감

 이번 프로젝트는 첫 언리얼 프로젝트이기 전에, 게임 개발자를 준비하면서 진행한 첫 팀 프로젝트였기에 매우 뜻깊었습니다. 지금까지는 깃허브에 코드를 올리긴 했어도 1인 프로젝트였기 때문에 딱히 신경 써야 할 부분은 없었지만, 팀 프로젝트를 진행하다보니 서로의 작업물을 간섭하지 않게 조심해야 할 부분이 많았습니다. 도중에 실제로 커밋 내용끼리 충돌이 나서 수정하는 데 3시간 가까이 소비하기도 했지만, 이 경험 덕분에 2차 이후의 프로젝트에서는 언리얼 내 Content 폴더 및 소스 코드 폴더부터 나누고 시작하여 큰 충돌 없이 프로젝트를 마무리할 수 있었습니다.

 

 또한 의외로 놀랐던 점은 유니티와 비슷한 부분도 많다는 점이었습니다. 한동안 유니티 엔진만 사용하다가 언리얼을 공부하면서 처음에는 너무 다르다고 생각했는데, 프로젝트를 진행하다 보니 생각 외로 유니티에 있던 기능들은 언리얼에도 대부분 존재하는 점에 놀랐습니다. 언리얼 엔진하면 일단 유니티에 비해 어렵다는 인식이 있었는데, 점점 언리얼의 문법에 익숙해지기도 하고 유니티와 생각보다 비슷한 점들도 있다는 것을 알게되면서 프로젝트를 시작할 당시의 두려움은 많이 떨쳐낼 수 있었습니다.

 

 다시 한 번 협업 요청에 잘 응하고 꼼꼼하게 피드백하여 디테일을 살릴 수 있게 도와주신 팀원 분과, 프로젝트를 지도해주신 강사님께 감사의 인사를 올립니다.