본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 20. 01:46

Unity Engine 10년의 세월을 거치며 Gun Rocket 업데이트하기

요약

10년 전 Unity 4.6/5.5 버전으로 개발된 개인 프로젝트 'Gun Rocket'을 최신 Unity 환경으로 업데이트하는 과정을 다룹니다. 작성자는 과거 프로젝트가 실행되지 않는 원인을 분석하며, Unity의 버전 명명 규칙 변화와 기술적 변천사를 회고합니다.

핵심 포인트

  • 10년 전 Unity 5.5 버전으로 개발된 프로젝트의 실행 불가 문제 확인
  • Unity의 버전 명명 방식 변화(숫자 기반에서 연도 기반으로, 다시 숫자로)에 대한 역사적 배경
  • 오래된 프로젝트를 최신 엔진 버전으로 마이그레이션하기 위한 첫 단계로서의 버전 확인 과정
  • 기술적 부채와 소프트웨어 환경 변화(Windows API, 드라이버 등)가 구형 프로젝트에 미치는 영향

Unity Engine 10년의 세월을 거치며 Gun Rocket 업데이트하기

10년 동안의 Unity 에디터 변화를 거치며 프로젝트를 업데이트하는 과정에 저와 함께해 주세요. 그 과정에서 저의 작업 방식, Unity 팁과 트릭, 그리고 Unity Engine의 기술적 변화에 대해 이야기할 것입니다. 이 중 몇 가지는 제가 Unity에서 근무하며 직접 목격했던 것들입니다.

약 10년 전, 저는 Gun Rocket을 만들었습니다.

그것은 제 게임 개발 여정의 초기 단계였습니다. 저는 Game Jolt에 5개의 프로토타입 게임을 출시한 상태였고, 이제는 진지하게 앉아서 돈을 지불할 가치가 있는 무언가를 만들 때가 되었습니다. 저는 "n++... 그런데 Asteroids 스타일의 우주선이라면 어떨까?"라는 아이디어로 시작했습니다.

개발에는 약 한 달이 걸렸습니다. 그 결과 100개의 레벨, 조종 가능한 서로 다른 능력치를 가진 여러 대의 우주선, 그리고 LAN 멀티플레이어 전투 모드까지 갖춘 게임이 탄생했습니다. Gun Rocket은 또한 저의 가장 수익성 높은 개인 프로젝트로 손꼽힙니다. 성공적인 Steam Greenlight 과정을 거친 후, 몇 년 동안 게임의 Steam 배포 권한을 라이선스 계약하고 제안을 받기도 했습니다.

최근 저는 제 게임 개발 여정을 되돌아보고 있었습니다. Gun Rocket을 플레이하기 위해 실행해 보려 했지만, 실행되지 않았습니다. 아무리 클릭해도 게임은 열리지 않았습니다. 로그(log)는 비어 있습니다. 아마도 어떤 드라이버나 Windows API가 더 이상 작동하지 않는 것 같습니다.

그래서 이제 소매를 걷어붙이고 Gun Rocket을 2026년으로 가져올 때가 되었습니다. 함께 가주시겠어요? 동료가 있다면 좋겠습니다.

Gun Rocket이 실행되지 않습니다. 어떻게 해야 할까요?

먼저 Unity Editor에서 게임을 여는 것부터 시작해 봅시다. 다음 단계로 넘어가기 전에 현재 에디터 버전에서 게임을 테스트하며 다시 익숙해지는 시간을 가질 것입니다. Unity 프로젝트의 버전은 /ProjectSettings/ProjectVersion.txt에 저장됩니다. 단순한 목적을 가진 단순한 파일입니다. 제가 보는 내용은 다음과 같습니다:

m_EditorVersion: 5.5.0f3

이 파일의 git 히스토리를 되돌아보니, 실제로 저는 2015년에 4.6.0p1 버전에서 게임을 개발했다는 것을 알 수 있습니다. ProjectVersion 파일은 2018년에 버그를 수정할 수 있기를 바라며 4.6에서 5.5로 마이그레이션(migrating)할 때 생성되었습니다(수정되지는 않았지만 말이죠). 이것이 Unity가 어떻게 변해왔는지에 대한 우리의 첫 번째 흥미로운 사실입니다. 시간이 정말 빠르네요.

어쨌든! Gun Rocket은 가장 최근에 Unity 5.5.0f3에서 개발된 것으로 보입니다. 현재 Unity 기술 스트림 (tech stream)은 6.5 beta입니다. 그렇게 나쁘지는 않아 보이네요! 메이저 버전 (major version)이 딱 하나 올라간 것뿐이니까요, 그렇죠?

틀렸습니다!

2017년 무렵, Unity는 자신들의 넘버링 방식이 기업 친화적이지 않다고 결정했습니다. 당시 그들은 게임 분야에서 더 많은 수직 시장 (verticals)으로 확장하려고 시도하고 있었습니다. 제 생각에 기업들은 소프트웨어 버전을 연도별로 매기는 것을 좋아하는 것 같아서, Unity도 그렇게 했습니다. 그렇게 하면 장기 지원 (long-term support)에 관한 메시지를 전달하기가 더 쉬워집니다. 예를 들어 Unity가 특정 릴리스를 3년 동안 지원한다고 가정해 봅시다. 그 지원은 언제 끝날까요? Unity 5.5 (???)라고 말하는 것보다 Unity 2017 (2017 + 3 = 2020)이라고 말하는 것이 훨씬 쉽습니다.

요즘 Unity는 다시 단순한 숫자로 돌아왔습니다. 오늘날의 메이저 버전 번호는 6입니다. 적어도... 웹사이트에는 그렇게 나와 있네요. 이제 Unity 버전 번호는 6000.4.1f1과 같은 식입니다. 저는 이게 정말 웃기다고 생각합니다. 마치 Loony Tunes의 기술 명칭을 떠올리게 하거든요. 'Roadrunner Catcher 3000'이라도 부르고 싶은 심정입니다. 다시 말하지만, 여기에는 타당한 이유가 있습니다. 6000은 2023보다 큽니다. 2023은 Unity의 마지막 연도 기반 버전입니다. 따라서 모든 버전 정렬 코드 (version sorting code)가 문제없이 계속 작동 (Just Work TM)할 것입니다. 타당한 이유죠. 하지만 저는 여전히 이게 재미있다고 생각합니다.

그래서 저는 Unity Hub를 열고 5.5.0f3을 찾아봅니다. 바로 선택할 수 있는 옵션 중에는 없습니다. Unity는 공식 릴리스 (Official Releases; 장기 지원 및 최신 지원 마이너 릴리스 6000.4.1f1), 프리릴리스 (Pre-releases; 현재는 6000.5.0b1 beta만 있음), 그리고 아카이브 (ArChIvE)를 제공합니다. 우리는 아카이브에서 많은 시간을 보내게 될 것입니다. 저는 아카이브를 사람들이 차마 버리지 못해 보관해 두는 지하실 뒷방이라고 생각하고 싶네요. 이 모든 버전이 유지되고 있다는 점은 정말 훌륭합니다. 이는 Gun Rocket을 2026년까지 가져가려는 저의 야망이 — 비록 간신히일지라도 — 실현 가능성이 있다는 것을 의미합니다. 아카이브는 Unity 5까지만 거슬러 올라갑니다. 2018년에 4.6에서 업그레이드해 두길 잘했네요!

와, 이 모든 역사를 훑었는데 아직 에디터 (editor)조차 열지 않았습니다. 이제 한번 시도해 봅시다.

어라. Gun Rocket이 5.5.0f3에서 열리지 않습니다.

Steam에 있는 게임 빌드와 똑같이 작동합니다. 로그에 아무런 정보도 남기지 않고 그냥 종료됩니다. 젠장.

Google 검색을 해보니 이것이 라이선스 확인 (license check)과 관련이 있을 수 있다고 합니다. Unity 5는 Unity Hub가 나오기 전 버전입니다. 그러니 라이선스 확인 문제일 수도 있다는 점은 충분히 납득이 갑니다. 제안된 대로 Hub를 통하지 않고 Unity.exe를 통해 열어보려고 시도했습니다. 역시나 안 됩니다.

좋아요, 그럼 더 최신 버전을 시도해 봅시다. 5.5 버전에서 게임을 확인하고 싶었지만, 운이 없었나 보네요. 가장 최신인 Unity 5 버전인 5.6.7f1을 가져왔습니다. 이번에도 Unity Hub에서는 실행되지 않지만, 이 시점에서는 예상했던 바입니다. Unity.exe로 실행하면 어떨까요?

와, 정말 향수가 밀려오네요. 익숙하면서도... 오래된 느낌이랄까요? Unity 5.5는 제 눈에 확실히 구식으로 느껴집니다. 당시에는 현대적이고 세련된 느낌이었겠지만, 지금 열어보니... 전혀 그렇지 않네요. 한 가지 기억나는 점은 UI가 Windows 디스플레이 설정 (Windows Display Settings)에 따라 크기가 조절되지 않는다는 것입니다. 제 화면 UI 배율은 125%로 설정되어 있는데, Unity는 이를 전혀 반영하지 않아서 모든 UI가 아주 작게 느껴집니다.

여기서 눈에 띄는 또 다른 점은 Standard Assets 폴더입니다. 제 기억이 맞다면 프로젝트를 생성할 때 StandardAssets를 프로젝트에 포함할지 선택할 수 있었습니다. 여기에는 몇몇 파티클 (particles), 카메라 및 상호작용을 위한 스크립트 (scripts), 그리고 툰 셰이더 (toon shader)가 포함되어 있습니다. 와, 이 불꽃 효과 좀 보세요!

좋아요, 좋아. Gun Rocket을 열었습니다. 보답하는 의미로 Unity 포럼 (Unity Forums)에 댓글을 남기고 다음으로 넘어가죠.

자, 이제 플레이해 봅시다!

입가에 미소가 가득 번집니다. 음악은 제 친구인 Peter Dmitrieff가 만들었는데, 와, 여전히 전율이 돋네요. 정말 멋진 향수네요!

이 컴퓨터에는 저장된 게임 데이터가 없어서 튜토리얼을 거쳐 첫 번째 레벨로 이동합니다. 제가 허우적거리는 모습을 구경하시겠어요?

그리고... 첫 번째 레벨을 로딩하자마자 폭발한다고요? 이건 좋지 않은데요.

몇 번 시도해 본 끝에, 함선이 약 0.5초 동안 움직이지 않으면 폭발한다는 사실을 깨달았습니다. 이 버그 (bug)가 그동안 계속 존재했던 걸까요? 아, 이런. 제발 아니길 바랍니다!

버그가 나타날 때마다 바로 해결해야 할까요, 아니면 엔진 마이그레이션 (migration)에 집중한 뒤 나중에 버그를 해결해야 할까요? 좋든 싫든, 저는 버그를 기록해 두었다가 마지막에 수정하기로 결정했습니다. 엔진 변화에 맞춰 게임을 마이그레이션하는 것만으로도 할 일이 충분할 것이기에, 중간에 스스로 일을 더 만들고 싶지는 않습니다.

무언가 심각하게 망가진 것이 없는지 확인하기 위해 조금 더 플레이해 봅니다. 저장 시스템 (save system)은 작동합니다. 약 15개 레벨을 플레이해 보았습니다. 함선을 변경할 수 있고, 설정 변경도 잘 작동합니다. Gun Rocket은 다뤄야 할 UI/UX 영역이 그리 넓지 않습니다. 충분히 만족스러울 만큼 플레이해 본 뒤, 다음 단계로 넘어가기로 결정합니다.

계획 (The Plan)

지난 몇 년간 Unity Engine에서 일어난 모든 기술적 변화를 고려하여, 저는 한 번에 하나의 메이저 버전씩 단계적으로 이동하는 전략을 택하기로 했습니다.

5.6.7f1 → 2017.4.40f1

시작이 매우 좋습니다. 이 전환 과정은 완전히 아무 일 없이 지나갔습니다. 심지어 2017.4.40f1이 이미 설치되어 있었습니다.

git 커밋 (git commit)을 살펴보니... 정말 아무 일도 일어나지 않았습니다. ProjectVersion.txt 파일만 업데이트되었습니다.

아, 그리고 UnityPackageManager/manifest.json이라는 새로운 파일이 생겼습니다. Unity가 패키지 매니저 (package manager)를 도입한 곳이 분명합니다. 웃기게도, 이 파일은 완전히 비어 있습니다. 이전에 이런 것을 본 기억이 없습니다. 정말 아름답군요.

{
"dependencies": {
}
...

Unity는 엔진이 성장함에 따라 제가 즉석에서 기억할 수 있는 최소한의 세 가지 목적을 위해 패키지 매니저를 도입했습니다:

  1. C# 코드를 엔진 코어 (engine core)에서 분리하여, 사람들이 필요할 때 확인하고 수정할 수 있는 곳으로 옮기는 것.

  2. 사람들이 원하는 Unity 패키지를 선택할 수 있도록 하는 것... 원하지 않는 패키지도 선택할 수 있게 말이죠! 엔진 기능이 늘어남에 따라 사용자가 선택적으로 포함하거나 제외 (opt in/out)할 수 있게 하여, 디스크 공간을 스스로 제어할 수 있도록 합니다.

  3. 1st 파티 및 3rd 파티 팀들이 사용할 수 있는 C# 모듈 (C# modules)의 표준을 제공하는 것.

저는 거대한 '패키지화 (packagification)' 시기에 Unity에 있었습니다. 목표는 고결했지만, 결과적으로 모든 팀의 다양한 패키지 간의 의존성 (dependencies)을 유지하는 것이 그 자체로 매일 발생하는 골칫거리가 되었습니다. 언젠가 이에 대해 글을 쓸 수도 있겠지만, 이 글은 그것에 관한 글이 아닙니다.

어쨌든, 이번 업그레이드는 아무것도 아니었습니다. 이건 아주 쉬울 것 같습니다.

내레이터: 낄낄거린다

2017.4.40f1 → 2019.3.15f1

자신감이 좀 넘쳐서 Unity 2018은 건너뛰겠습니다. Gun Rocket은 소스 제어 (Source Control)에 있으니, 필요하면 언제든 되돌릴 수 있습니다. 마침 2019.3.15f1이 설치되어 있으니, 2018은 건너뛰고 어떻게 되는지 한번 봅시다.

세상에. 2019로의 업그레이드는 정말 만만치 않았습니다. Unity 측에서 몇 가지 중대한 변화를 단행했거든요. 그 내용은 다음과 같습니다:

Unity가 JavaScript 지원을 제거함.

Unity의 네트워킹 (Networking) 솔루션인 UNet이 2018.4에서 지원 중단 (Deprecated) 되었으며, 2019.1 버전부터는 더 이상 사용할 수 없음.

AssetDatabase v2 도입

중첩된 프리팹 (Nested Prefabs) 및 프리팹 편집 (Prefab Editing) 전면 개편

음, 이미 임포트 (Import) 버튼을 눌러버렸네요. 일단 진행해 봅시다.

JavaScript에 관하여:

제가 처음 Unity를 배우기 시작했을 때, Unity는 Boo, JavaScript, C#이라는 세 가지 스크립팅 언어를 지원했습니다. 저는 저에게 더 익숙했던 JavaScript로 시작했지만, Unity가 C#을 미래라고 공표했기에 C#으로 전환했습니다. 다행히 상황이 Gun Rocket 작업에서 큰 골칫거리를 면하게 해주었습니다. 제가 JavaScript로 작성한 스크립트가 몇 개 있었거든요. 3개였습니다. 딱 3개의 JavaScript 스크립트 말이죠.

그 스크립트들을 C#으로 다시 쓰는 것은 쉬웠습니다. 하지만 깨진 참조 (Broken references)를 수정하는 것은 더 어려웠습니다. 참조가 깨지면 Unity 에디터 (Editor)는 제가 참고할 만한 정보를 거의 주지 않기 때문입니다.

몇 가지 방법을 시도한 끝에, 저는 에디터 2017과 에디터 2019를 나란히 띄워놓고 작업하는 워크플로우 (Workflow)를 찾아냈습니다. 모든 프리팹을 수동으로 비교했습니다. 다시 말씀드리지만, Gun Rocket은 그렇게 큰 게임이 아닙니다. 그래서 그렇게 나쁘지는 않았습니다. 하지만 3개의 스크립트를 위해 몇 시간은 걸렸습니다.

네트워킹 (Networking)에 관하여:

Unity 5에서 Unity는 UNet이라는 네트워킹 솔루션을 가지고 있었습니다. 제 관점에서는 괜찮았습니다. 신입 게임 개발자로서 빠르게 작동시킬 수 있었거든요. Unity가 서버를 호스팅해주었지만, 저는 비용 지불에 대해 걱정하고 싶지 않았기에 Gun Rocket은 LAN 전용으로 유지했습니다. 지금이 2015년이라는 점을 기억하세요. LAN 파티가 여전히 열리고 있었고, 적어도 저에게는 그랬으니까요!

Gun Rocket의 LAN 모드는 큰 반향을 일으킨 적이 없습니다. 꽤 단순했죠. 그래서 그냥 삭제하기로 한 결정은 쉬웠습니다.

역사는 반복되는 경향이 있습니다. 2022년경 Unity는 Netcode for Gameobjects 패키지를 도입했습니다. 하지만 2026년 3월 31일부로 그들은 더 이상 서버를 호스팅하지 않습니다. 이는 Unity Multiplay Game Hosting Service에서 Rocket Science Group이라는 회사로 전환되었습니다. 만약 Unity가 서버를 통해 수익을 창출하지 않는다면, Netcode for Gameobjects 패키지가 1st party (자사 제공) 솔루션으로서 얼마나 더 오래 살아남을 수 있을까요?

AssetDatabase v2에 대하여:

이번 업데이트는 무섭게 느껴집니다. 제 프로젝트의 말 그대로 모든 에셋 파일을 변경하기 때문입니다. AssetDatabase v2에 관한 Unity의 블로그 포스트를 다시 살펴보면, 이 업데이트가 가져올 모든 훌륭한 개선 사항들을 읽을 수 있습니다. 특히 저에게 관련이 깊은 점은 더 빠른 임포트 (import) 시간과 더 빠른 플랫폼 전환 (platform switching)입니다.

솔직히 저는 이 분야의 내부 사정 (inside baseball)에 대해서는 잘 모릅니다. 제가 아는 것은 변환이 아무런 문제 없이 진행된다는 것입니다. 아주 좋네요.

Nested Prefabs 및 Prefab 편집 개편에 대하여:

Unity의 Prefab (프리팹)은 예전에 쓸만하긴 했지만, 아주 훌륭하지는 않았습니다. 사용자들은 수년 동안 기본적인 프리팹의 개선을 요구해 왔습니다.

이에 대응하여 Unity는 프리팹에 집중적으로 투자했고, 여기서 그 결실을 볼 수 있습니다. 이제 프리팹을 자체적인 가상 씬 (virtual scenes)에서 편집할 수 있습니다. 프리팹의 속성 (properties)을 오버라이드 (override) 할 수 있으며, 개별 변경 사항을 나중에 프리팹 에셋에 다시 반영할지... 아니면 반영하지 않을지 선택할 수 있습니다! 또한 프리팹을 중첩 (NEST) 할 수 있습니다. 이 모든 것은 엄청난 변화였습니다. 이는 프리팹의 가치를 훨씬 더 높여주며, 온갖 종류의 새로운 사용법과 워크플로우 (workflows)를 가능하게 합니다. 또 하나의 큰 승리입니다.

다시 말하지만, 저는 이 변화 하나만으로도 전체 기사를 쓸 수 있지만, 이 이야기와는 그리 관련이 없습니다. 그러니 다음으로 넘어가겠습니다.

**기타 사항들!

Unity Editor UI가 새로워졌습니다. 훨씬 더 현대적인 느낌을 줍니다. 또한 제 Windows 디스플레이 설정에 따라 스케일링 (scaling)이 적용되는데, 이는 정말 좋습니다.

또 다른 버그도 발견했습니다. 이 버전의 Unity에서는 메인 메뉴의 버튼 애니메이션이 이상하게 멈춰버립니다. 애니메이션이 멈추면 텍스트가 겹쳐서 보기 흉해집니다. 제 버그 리스트에 추가해 두겠습니다. 혹시 모르죠. 더 최신 에디터 버전에서는 수정되었을지도? 그러길 바랄 뿐입니다.

2019.3.15f1 -> 2019.4.41f2

지난 업데이트가 저를 겁먹게 했기에, 마지막 2019 에디터 버전을 다운로드했습니다.

에디터가 다크 테마 (Dark Theme)로 부팅되는 것을 즉시 확인했습니다. 이는 사용자들이 오랫동안 요청해 온 또 다른 사항이었습니다. 꽤 큰 변화였습니다.

이봐요, 너드(Nerds) 여러분: 다크 테마는 멍청한 짓입니다. 그냥 공간을 밝히세요. 눈의 피로 (Eye strain)는 밝은 화면과 어두운 방 배경 사이의 대비에서 옵니다. 조명을 고치세요. 아니면 굳이 동굴 고블린 (Cave goblin)처럼 있고 싶다면 화면 밝기를 낮추세요. 다크 테마는 과대평가되었습니다. 반박 시 여러분 말이 맞습니다.

Unity가 자동으로 업데이트해 주는 몇몇 지원 중단된 API (Deprecated APIs)들이 있습니다. 멋지네요.

AI 자동 생성 콘텐츠

본 콘텐츠는 HN Game Dev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0