왼손잡이해방연대 아지트

사용자 확인중...

유니잼 참가 후기

ㅁㅅ,

59

5

유니잼은 게임 개발 동아리 연합회에서 주최하는 일종의 게임 개발 해커톤이다. 돈 없는 동아리 연합회에서 주최하는 만큼 상금은 없지만 전국의 다양한 게임 개발을 좋아하는 사람들이 모여서 작업을 할 수 있다는 점에서 흥미를 느끼고 참가 하기로 했다… 2박3일 간의 일정이었기 때문에 날짜별로 그 날 하루에 대해 정리를 해놓겠다. 여기서 말하는 그 날 하루는 잠에서 깬 후부터 잠에 들기 전까지를 말한다.

첫 째 날

UPnL 에서는 3명이 나가는데 대학동에 자취하는 후배 한 명과 후배의 다른 동아리, SNUGDC(게임 개발 중앙 동아리)의 부원 한 명과 같이 수원까지 가기로 했다 10시 반쯤 만나서 아점을 국밥으로 해결하고 수원으로 출발했다. 가는 동안에는 긴장이 많이 됐었는데 왜냐하면 군대 전역 이후에 실질적으로 제대로 된 게임 개발을 해본 적도 없고 협업에 대한 경험은 손에 꼽을 정도로 적었기 때문이다… 거기 가면 전국에서 모인 다양한 사람들이랑 팀을 짜게 될테고 그런 사람들과 2박 3일을 함께 보내며 개발을 해야 할 텐데 민폐만 끼치면 어떡하지 라는 불안감이 들었다.

불안감과 함께 행사장에 도착했다 예상보다 거의 한 시간이나 일찍 도착해서 같이 온 사람들과 떠들며 행사장 스태프들이 일하는 것을 구경했다. 게임 개발 동아리 연합회의 현 회장은 서울대학교 총학생 회장님이신데 가까이서 보니까 뭔가 신기했다. 근데 이번 게임잼의 컨셉이 재미의 신이 재미를 원해서 게임 개발을 통해 봉인을 어쩌구… 레이드 저쩌구… 여서 스태프들이 망토와 칼 소품을 가지고 다녔는데 오글거리면서도 재밌으면서도 오글거렸다. 그런 생각을 하다보니 점점 개회 시간에 가까워지며 사람들이 하나 둘 들어오기 시작했다. 우리 테이블에는 어쩌다보니 UPnL 사람들과 SNUGDC 사람들만 앉게 되어 서울대 향우회 느낌이… 되어버렸지만 이대로 팀인 것은 아니니까 별 생각은 안 했다. UPnL 에서는 3명 밖에 참가를 안 했는데 SNUGDC에서는 10명 넘게 참가했다는 말을 듣고 새삼 중앙동아리가 역시 크긴 하구나라는 생각만 했다.

아무튼 개회식이 시작하고… UNIDEV(게임 개발 동아리 연합회의 이름) 스태프들이 이번 게임잼 컨셉에 맞는 잔뜩 오글거리는 말과 함께 행사 일정 및 규칙 등에 대한 안내를 해주었다. 후원사인 네오위즈에서도 연사님이 한 분 오셔서 격려 및 조언의 말씀을 해주셨는데 가장 기억에 남는 말은 프로젝트를 진행할 때 가장 중요한 것은 잘 버리는 것이다 라는 말이었다. 예전 NDM(넥슨에서 주최하는 게임 개발 대회)에 참가했을 때는 욕심이 많아서 이것도 넣고 저것도 넣다가 결국 뭣도 아니게 된 적이 있었는데 그런 경험이 있었기에 연사님의 그 말이 좀 더 와닿았던 것 같다.

개회식이 끝난 후 본격적으로 팀 빌딩을 시작했는데 팀 빌딩에 체계가 잘 갖추어지지 않은 느낌이었다. 보통 한 팀당 기획 1 개발자 2~3 아트 및 사운트 1~2 느낌으로 제한을 두고 그 기준에 맞게 참가 신청을 받는데 이번에는 자유롭게 팀 빌딩을 하게 해서 일찍 팀을 짜지 못 한 사람들은 결국 기획이 3명인 팀, 아트가 없는 팀, 개발자가 없는 팀 등등 제대로 진행을 할 수 없는 팀이 되어 버리기도 했다… 난 기획자 한 분이 우리 테이블에 와서 아이디어를 말씀해주셨을 때 냉큼 알겠다고 하고 UPnL 후배와 함께 팀에 들어갔다. 그러고 기획자 분이 다른 팀원들 더 모아오겠다고 하셔서 나와 후배는 여유롭게 기다리고 있었는데 기획자분이 아트를 두 분이나 섭외해 오셨다. 게다가 기획자분도 미대생이라 사실상 아트가 3명인 팀이 되어 게임을 만들게 되었다… 결국 앞서 말한 아트가 없는 팀은 우리 팀 때문에…? 라는 생각을 순간했다. 아무튼 빠른 시간 안에 팀 빌딩을 마무리 해서 우리 팀은 자리를 잡고 여유롭게 기다릴 수 있었다.

팀 빌딩 후 나와 후배는 개발 환경 세팅을 하고 있었다. 서로 git을 잘 몰랐지만 명색이 선배인 내가 이곳 저곳에서 주워들은 내용으로 세팅을 도와주었다. 그 결과 유니티 버전 맞추기 + git 세팅이 2시간 걸렸다(???). 사실 아직 실제 게임잼 시작 시간 전이라 상관은 없었지만 생각보다 시간이 빨리 가서 놀랐다. 그리고 이 경험은 앞으로 많이 하게 될 경험이었다… 개발 환경 설정 및 기본적인 개발 이후에 팀원들과 아이스 브레이킹 겸 저녁을 먹으러 가면서 간단하게 말을 주고받고 있었는데 충격적인 사실을 듣게 되었는데 그것은 나만 21 학번이고 다른 사람들은 다 24학번이라는 것이었다… 군대 가기 전 게임잼에 참여했을 때는 팀 내에서 막내를 맡았었는데 새삼 시간이 흘렀다는 것을 느꼈다. 우리 팀은 한예종 게임 개발 동아리에서 오신 아트 두 분, SNUGDC 기획자 한 분, 그리고 개발자인 나와 후배로 이루어진 팀이었다. 한예종에 게임 개발 동아리가 있다니 라는 생각을 하고 이것 저것 물어봤는데 역시 항상 개발자가 없어서 고민이라고 하셨다. 우리는 아트가 가뭄이라서 개발자만 많은데 나중에 서로 교류회 같은 걸 열어보면 좋을 것 같다고 생각했다.

밥을 먹고 돌아와서 본격적인 개발을 시작했다. 우리가 만들기로 한 게임은 종스크롤 플랫포머 게임이었다. 게임의 컨셉은 마녀의 냄비에 빠진 게가 요리되기 싫어서 요리 재료들을 밟고 점프하고 벽을 기어 다니면서 기다란 냄비를 빠져나오는 컨셉이다. 굉장히 간단한 기획이다. 이 기획을 선택한 이유는 단태형님(UPnL 선배)이 이런 행사 때마다 가장 강조했던 것이 간단한 기획을 골라 핵심을 개발하는데 치중해야 한다는 것이었기 때문이다. 아무튼 나는 평소에 플랫포머 혹은 횡스크롤 2D 액션 게임을 많이 만들었기 때문에 프로토타입을 금방 만들고 “생각보다 금방 끝나겠는데?” 라는 생각을 하고 말았다. 간과했던 것은 게임 개발은 말도 안 되는 변수 및 이슈들이 잠재되어 있는 행위라는 것이다. 앞으로 자세히 말하겠지만… 파일 그림자 분신술, 유니티 응답 없음 이슈, 나의 개발 실력 이슈, 마지막으로 그냥 순수하게 유니티가 안 켜지는 이슈가 발생했었다. 결국 넉넉하게 끝날 줄 알았던 예상은 빗겨나가고 가까스로 빌드에 성공(?) 했다(왜 물음표가 붙었는지는 마지막 날 파트에 설명할 것이다). 다시 돌아와서, 프로토타입을 만들었지만 플랫포머 게임의 특성 상 사람들이 최적이라고 생각하는 조작감이 다 상이하다. 이제와서 생각해보면 기획에 아트 레퍼런스를 제시하는 것처럼 조작감 레퍼런스를 제시했다면 더 쉬웠을 것 같지만 이런 협업 게임 개발 해커톤 경험이 전무한 24학번들과 그냥 전민서로 이루어진 팀이었기 때문에 그 점을 몰랐었다. 조작감 개선 후 테스트, 피드백 후 개선, 테스트, 개선, 테스트… 를 반복하고 마지막으로는 플레이어 속도, 점프력 등의 파라미터들을 조정했다. 그러다 보니 이미 새벽 3시가 되었다(????). 사실 한 일은 캐릭터 이동이 거의 전부였는데 갑자기 새벽 3시가 되었다는 사실에 놀랐었다. 앞으로 시간이 잘 안 가면 게임잼을 해야겠다 라고 마음 속으로 농담을 던지면서 다른 사람들이 하는 것처럼 바닥에서 잠을 청했다.

둘 째 날

차가운 바닥에서 깨고 컴퓨터 앞에 앉았다. 편히 자지 못 했던 탓에 의자에 앉자마자 자세가 흐트러지고 집중하기가 힘들었지만 "팀원들도 힘들게 하고 있는데 나만 쉴 수는 없지" 라고 생각하며 억지로 눈을 뜨고 코드를 쳐다봤다. 남은 것은 플랫폼 기믹들과 각종 방해 기믹들, 맵 동적 생성, 그리고 아이템들과 아트 받고 합치기만 하면 됐기 때문에 금방 하고 반드시 12시 전에 싹 다 정리하고 사우나에 가서 몸 지지고 자겠다라는 다짐을 했다. 그렇게 열심히 개발을 하다가 결국 새벽 3시에 사우나로 출발할 수 있었다... 라고만 쓰고 둘 째 날 파트를 넘기고 싶지는 않기 때문에 좀 더 구체적으로 그 날 있었던 일을 적어보겠다.

일단 나는 다른 팀에 비해 굉장히 여유로운 기획을 결정했기 때문에 할 일은 그다지 많지 않았다. 저번 게임잼 때 가장 시간을 많이 들였던 것이 git conflict 해결이었기 때문에 후배한테 절대로 conflict 가 나지 않게 유니티를 만지는 법을 알려주며 (결국 한 번은 나버렸지만) 개발을 진행했기 때문에 순수하게 게임 개발 시간에 투자를 할 수 있었고 다른 팀 개발자들에 비하면 굉장히 여유로웠다. 그런 여유를 가지고 UPnL 회장인 다른 후배가 있는 팀으로 항상 구경을 갔는데 굉장히 고통받고 있는 모습을 항시 보여주고 있었다. 그 팀의 기획을 봤을 때 굉장히 재밌지만 3일 안에 만들려면 개발 실력이 상당해야겠다 라는 생각을 했는데... 유니티 개발에 일가견이 있는 후배도 그 정도로 고통받고 있는 것을 보니 안 가길 잘했다라는 생각이... 들었다. 이것 때문에 최대한 간단한 기획을 골랐던 것이기도 하고. 아무튼 그런 식으로 구경을 다니며 여유를 부리고 있다가 다시 돌아와서 개발을 시작하는데 이 때부터 아트의 중요성을 알게 되었다. 첫 날이야 대충 네모가 점프하고 벽 타고 네모가 네모를 밟고 네모가 사라지는 게임이어서 이게 재밌을까? 하는 생각이었는데, 둘 째 날 아트가 완성되어 그 스프라이트를 게임에 집어 넣고 적용한 후 바로 아트의 중요성을 깨달아버렸다. 아트가 들어가자마자 조작감이 달라지고 게임 분위기가 달라진 것이다. 원래 이런 커뮤니티 행사에 열심히 참여하는 편은 아니지만 이것을 느끼고 나서는 이런 곳에 자주 와서 아트랑 친해져야겠다는 생각이 들었다.

열심히 개발을 하다보니 처음에 사우나에 가기로 했던 시간에서 3시간이 추가되었다... 왜 이렇게 늦춰졌냐 하면 다음과 같은 이유들이 있다.

  • 내가 내 생각보다 개발을 못 함
  • 게임잼 특성 상 코드를 막 짜는데 그런 코드를 리팩토링 하기 쉬울리 X
  • 그런데 리팩토링을 하게 됨

게임잼은 짧은 시간 안에 결과물을 내는 것이 목적인 행사라 만들다 보면 파일 구조나 git 네트워크 구조에 별로 신경을 쏟지 않게 되는데 그것이 코드를 짤 때도 보통 적용된다. 코드 구조를 개떡같이 짜놓고 마구마구 하드코딩 한 후에 일단 돌아가니까 오케이입니다 라고 억지로 나를 설득하고 넘어간 코드들이 한 둘이 아니었기 때문에 막상 그것을 다시 봐야 할 때가 오니 눈물이 흐를 정도였다. 일단 마구마구 복사 붙여넣기 되어 있는 똑같은 코드들, 똑같은 상태를 표현하는 변수들, 그리고 애초에 함수 위치가 왜 여기있지? 하는 미친 위치 선정까지, 직접 겪어보니 깔끔한 코드 작성의 중요성을 알게 되었다. 물론 이틀 뒤에 까먹을 것 같긴 하지만 ㅎ... 이런 상황이었기에 퇴근 시간이 3시간 늦춰지는 것은 사실 당연한 수순이었고, 그나마 할 일이 얼마 없었기에 사우나에 갈 수 있었던거지 우리 팀 말고 다른 팀들은 순수하게 밤새서 만들었었다. 나는 다행히도 사우나에 가서 씻고 잠을 잘 수 있었다. 걸어서 30분 걸리는 곳이었지만 나와 후배 둘 다 전 날 바닥에서 자는 것이 재앙이라는 것을 알게 되었기 때문에 억지로 졸린 눈을 뜨고 걸음을 나섰다. 사우나에 도착 후 샤워를 하고 온탕에서 몸도 좀 지져준 후에 잘 수 있는 곳으로 가서 잠을 잤다. 수원이고 새벽이고 주말인데도 사람이 엄청 많아서 구석에 낑겨서 잘 수 밖에 없었지만 바닥에서 자는 것보다는 당연히 훨씬 나았다... 그렇게 둘 째 날을 보내고 마지막 날 아침 6시 20분에 눈을 뜨게 되었다.

마지막 날

7시 반에 회의를 하기로 했기 때문에 사우나에서 6시 20분 즈음에 깨고 샤워하고 다시 사우나를 나왔다. 아침 공기는 상쾌했고 드디어 마지막 날이구나~ 집에 갈 수 있겠구나~ 하는 마음과 함께 경쾌한 발걸음으로 행사장으로 향했...지만,

도착 후 게임 개발을 재개하려고 유니티를 키려고 했는데, 유니티가 안 켜지는 것이었다. 정확히 말하자면 유니티 허브가 안 켜져서 유니티 프로젝트를 열 수가 없었다. 진짜 전혀 예상하지 못 했던 변수가 찾아와서 멘탈에 금이 갔었는데 아무리 구글링을 해도 답이 나오질 않았다. 근데 당장 1시에 마감이고 해서 일단은 제쳐두고 후배 컴퓨터로 마무리 작업을 다 하기로 했다. 정말 다행이었던 것은 전 날 밤 기특하게도 싹 다 원격에 푸시하고 머지까지 해놔서 그나마 후배 컴퓨터로 작업을 이어 나갈 수 있었다. 그게 아니었다면... 상상도 하기 싫다. 마지막 날 만들어야 했던 것은 클리어, 게임 오버, 그리고 후배가 만든 UI와 내가 만든 플레이 씬을 합치는 것이었다. 언뜻 봐서는 얼마 안 되어 보여서 금방 할 것 같았지만... 클리어, 게임 오버는 플레이어의 현재 상태에 근거해서 조건을 판단해야 하는 코드를 짜야 했다. 다시 말해서 현재 상태를 알려주는 이전의 코드들을 뒤져봐야 한다는 것이었다. 여기서 다시 깔끔한 코드 작성의 중요성을 느끼며 "다시는 이렇게 못생긴 코드를 짜지 않겠습니다" 라고 생각하며 작업을 했다. 그리고 후배가 만든 UI와 내 씬을 합치는 작업도 생각보다 힘들었는데, 왜냐면 서로 작업하는 방식이 다르고 이제는 내 코드만 보는게 아니라 후배가 짠 코드도 봐야했는데 문제는 후배도 나랑 같은 상태라 자기가 어디에 어떤 코드를 짜놨는지 기억이 안 난다는게 문제였다. 결국 단순 탐색으로 내가 원하는 코드들을 하나 둘 씩 찾으며 작업을 해서 굉장히 오래 걸려버렸다. 또 다른 문제는 갑자기 어느 순간부터 렉이 엄청 걸리는 버그가 발생했다. 이게 절대로 버그가 걸릴 만한 게임은 아니어서 모두가 어리둥절, 특히 플레이 씬을 만든 나는 어째서 이렇게 렉이 걸리는건지 이해할 수가 없었다. 이것도 결국 내가 아무 생각없이 짠 코드 때문이었는데... 간단히 설명하면 다음과 같다.

  • 유니티에서는 0.02초마다 물리 작용을 처리하는 코드를 broadcast 방식으로 수행함.
  • 그 0.02 초라는 수치를 코드로 조정이 가능함.
  • 어쩌다 보니 그 수치를 절반으로 조정하는 코드를 짬.
  • 문제는 그 Time.fixedDeltaTime *= 0.5f; 를 매 프레임마다 돌리도록 코드를 짜버림.
  • 매 프레임마다 물리 작용 처리 횟수를 두 배로 늘리는 셈.
  • 그런데 물리 작용 처리를 0.000000000000000001초에 한 번 씩 하면 버틸 수 있는 컴퓨터는 양자 컴퓨터 밖에 없음.
  • 당연히 게임이 터지기 직전까지 감.

위 문제를 정말 고민하다가 가까스로 알게 되어 수정을 할 수 있었고 그건 참 다행이었다. 왜냐하면 렉이 적당히 걸리는 수준이 아니라 게임을 플레이 하지 못 할 정도로 걸렸었기 때문이다... 그렇게 마감 직전이 되어서야 드디어 빌드 작업을 하게 되었는데... 빌드를 거의 안 하고 항상 에디터에서 실험실만 열었던 나 + 비슷한 처지의 후배 두 명이서 빌드를 하니까 생각보다 쉽지 않음을 깨달았다. 일단은 가장 큰 문제였던 것은 해상도였다. 나와 후배는 아무 생각 없이 UI를 짜고 게임 플레이 씬을 짰는데 빌드를 해보니 해상도가 다 깨져 나오는 것이었다. 어떻게 어떻게 해서 잘 수정을 해서 후배 컴퓨터에서는 잘 돌아가는 것을 보고 이제 컴퓨터 한 대로만 시연을 돌리진 않으니 팀장님 컴퓨터로 빌드를 전송해서 테스트 해보았다. (유니티는 윈도우용 빌드와 맥용 빌드가 다른데 맥 빌드를 짜려면 내 컴퓨터가 있어야 했지만 내 컴퓨터로 유니티를 열 수 없는 상황이었기에 맥 빌드를 할 수 없었다. 근데 우리 팀에 맥북만 3명이라 사실상 이미 5명 중 2명만 시연에 참여할 수 있었다) 그런데 갑자기 팀장님 컴퓨터에서는 아예 다른 문제가 발생했다. 사운드는 들리는데 흰 화면만 나오는 것이었다. 앞에서 말했 듯 빌드에 대해서는 지식이 전무하기 때문에 이것에 대해서는 원인을 찾을 수 없었고... 시간도 없어서 결국 후배 컴퓨터 하나로만 시연을 하게 되었다.

빌드에는 실패했지만... 그래도 게임 자체는 꽤 재밌었고 아트가 너무 좋아서 결과물에 있어서는 굉장히 만족스러웠다. 시연회는 각자 테이블에 팀원들 노트북에 게임을 켜놓고 손님이 오면 한 번 씩 체험시켜주는 방식이었는데, 행사장의 모든 사람들이 투표권을 가지고 있었기 때문에 이 시연을 여러 컴퓨터로 해서 최대한 많은 사람들에게 플레이 시켜보는 것이 굉장히 중요했다. 그런 상황에서 빌드에 실패해 버린 나는... 죄책감을 느끼...지 않고 배고파서 후배랑 밥을 먹으러 갔다. 후배가 고기가 너무 먹고 싶대서 점심부터 삼겹살에 목살을 먹으러 갔는데 너무 맛있었다 ㅎㅎ 아무튼 돌아와서 나도 다른 팀들이 만든 게임들을 해보았는데, 내가 처음 게임잼에 참여했을 때와는 비교가 안 될 정도로 전체적인 퀄리티가 굉장히 높아져있어서 놀랐다. 아무래도 동아리 연합회가 커지면서 더 다양한 사람들이 참여하게 되고 특히 그런 과정 속에서 아트가 증가해 개발자 중심이었던 단체가 좀 더 다양한 사람들로 이루어진게 이유인 것 같았다. 그래서 나는 진짜로 순수하게 게임들을 즐기고 하니까 시간이 빨리 갔다. 시연회 시간이 끝나고 마지막 수상 시간이 되었다. 게임 자체는 재밌어서 상 받을만 했는데 빌드 이슈 때문에 노트북 한 대로 밖에 시연을 못 돌려서 상을 받을 수는 있을까 생각을 했었다. 팀원들은 굉장히 기대를 많이 했었는데 못 받으면 너무 미안할 것 같았다. 그래도 결국 우수상(3등)을 받아서 여태 들인 노력과 받았던 고통들이 보답받는 느낌이었고 정말 다행이라는 생각을 했다... 그렇게 신난 팀원들과 사진을 잔뜩 찍고 서로 고맙다고 수고했다고 인사를 하며 행사장을 나왔다.

2박 3일 동안 처음 보는 사람들과 협력해서 게임을 만들어내는 과정은 굉장히 힘들고 고되었지만 마지막에 느끼는 이 성취감은 말로 형용할 수 없을 만큼 컸다. 여기서 만난 뛰어난 개발자들, 아트분들과 기획자분들, 직접 다른 사람들과 협업하며 게임을 만들었던 경험, 그리고 그 속에서 받은 모든 자극들을 이어나가고 싶다. 만약 그렇게 된다면 이 2박 3일의 경험이 값졌었다고 자신감 있게 말할 수 있을 것 같다. 어떻게 이 긴 글을 끝내야 할지 모르겠네...

--- 끝 ---



목록

https://minseokim1.itch.io/jump-crab-unijam2025

만들었던 게임 링크입니다..

수원 ㅇㄷ서함? 설마 사우나 북수원온천인가