뜯어본 생각공개

게임 만들기

엔진도 차원도 라이선스도 달라서 코드가 한 줄도 안 넘어옵니다. 넘어오는 건 문장으로 줄어드는 규칙뿐입니다.

5편 · 코드 0

게임 쪽 물건을 열어 보고 적은 글을 모아 둔 칸입니다. 남이 만든 게임, 게임을 만드는 도구, 게임 관련 연구 — 다섯 편이 있습니다.

먼저 한 가지를 말씀드려야 합니다. 보통 「남의 것을 뜯어본다」고 하면 좋은 부분을 복사해 온다는 뜻으로 읽힙니다. 여기서는 그게 거의 안 됩니다.

게임은 부품을 뜯어 와도 제 기계에 안 맞습니다

자동차 부품에 비유하면 이렇습니다. 남의 차가 아무리 좋아도, 엔진 규격이 다르면 그 부품은 제 차에 안 들어갑니다.

게임도 같습니다. 제가 쓰는 제작 프로그램과 상대가 쓰는 프로그램이 다르고, 상대는 3차원인데 저는 2차원이고, 어떤 것은 「상업적으로 쓰지 말라」는 조건이 붙어 있고, 어떤 것은 아예 받을 물건이 없습니다(사진과 설명만 있고 프로그램은 안 올라와 있는 경우).

그래서 다섯 편을 쓰는 동안 제 작업물로 넘어온 코드는 한 줄도 없습니다.

그래도 「문장 하나」는 넘어옵니다

대신 넘어오는 게 있습니다. 부품이 아니라 규칙입니다.

예를 들어 한 편에서 얻은 것은 「숫자를 코드에 못 박아 두지 말라」는 문장 하나였는데, 그 한 문장이 제 코드 43군데를 가리켰습니다. 부품은 규격이 안 맞아 못 쓰지만, 「이렇게 만들면 나중에 고생한다」는 규칙에는 규격이 없습니다.

그래서 이 칸의 글들은 「무엇을 복사할까」가 아니라 「무슨 규칙을 배울까」로 읽는 편이 맞습니다.

조사 결과가 제 할 일 목록을 지운 적도 있습니다

만들기 전에 알아보는 일이 시간 낭비처럼 보일 때가 있는데, 반대인 경우를 한 번 겪었습니다.

어떤 게임에서 「특정 동작을 성공하면 화면이 느려지는 연출이 나온다」고 제가 알고 있었고, 그래서 「시간을 느리게 만드는 기능부터 만들어야겠다」고 할 일 목록에 적어 뒀습니다. 그런데 실제 자료를 확인해 보니 그 보상은 느려지는 연출이 아니라 다른 종류의 보상이었고, 느려지는 연출은 어느 자료에서도 확인되지 않았습니다.

만들어야 할 것 하나가 통째로 사라졌습니다. 안 만든 것도 성과입니다.

여기부터는 자세한 기록입니다

게임 쪽을 뜯는 자리. 이펙트 샌드박스, MMO 서버, 3D 에셋 생성, 상용 액션 게임의 전투 설계.

여기는 코드가 거의 안 넘어옵니다. 웹 GLSL을 Unity로, Three.js 3D 평면을 2D URP로 옮길 수가 없습니다. 그래서 읽는 방식이 처음부터 다릅니다 — 구현이 아니라 한 문장으로 줄어드는 규칙을 찾습니다.

하나, 그리고 그 한 문장이 제 코드 43곳을 가리켰다

Elemental Sandbox에서 넘어온 건 이것뿐입니다.

어빌리티 인스턴스는 seed와 비율만 기억한다. 미터·초·라디안은 매 프레임 설정에서 다시 계산한다.

일시정지 중에 슬라이더가 먹히는 이유가 이겁니다. 치수가 인스턴스에 굳지 않으니 진행 중에 값을 바꿔도 다음 프레임이 새로 읽습니다.

제 Unity 프로젝트는 정확히 반대로 짜여 있었습니다. yield return new WaitForSeconds(pattern.telegraphTime)이 코루틴 시작 시점에 전조 시간을 굳혀서, 플레이 중에 값을 바꿔도 진행 중인 전조에는 안 먹힙니다. 전체를 세니 WaitForSeconds 43곳 대 프랙션 루프 22곳이었습니다.

이펙트 코드는 한 줄도 안 가져왔는데 제 코드 43곳의 성격이 정해졌습니다. 이 분류에서 기대할 건 그런 종류입니다.

라이선스는 두 곳을 봐야 한다

같은 레포가 LICENSE에 MIT를 적어 두고 README에는 “provided as-is for the purposes of this project”라고 다른 말을 하고 있었습니다. 그리고 읽을 당시 생성 5일차에 기여자 1명이었습니다.

의존 대상이 아니라 교재로 다룰 것. 게임 쪽 레포는 수명이 짧아 이 구분이 특히 중요합니다.

다섯 편이 되니 코드가 안 넘어오는 이유가 넷이었다

한 편일 때는 “엔진이 달라서” 하나로 읽었습니다. 다섯이 되니 막힌 지점이 매번 다른 곳이었습니다.

대상 막힌 지점 그래서 남은 것
Elemental Sandbox 엔진과 차원이 다르다 치수를 굳히지 말라는 규칙 — 제 코드 43곳을 가리켰다
OpenMMO 라이선스가 비상업용 한 코드를 여러 런타임에 공유한다는 개념
Hunyuan3D-WorldClaw 코드가 아예 없다 중간 표현을 검사 가능한 형태로 · 이름 있는 변수의 합으로
진삼국무쌍 오리진 상용 게임이라 코드가 없다 일기토의 공유 시소 게이지 · 사기를 AI 전투의 판정치로
유니티 최근 업데이트 뜯을 코드가 아니라 릴리스 노트다 이사 버전은 개발 중반에 올리지 않는다

넷이 다른 이유로 막혔는데 결과는 같습니다 — 전부 문장으로 줄었습니다. 그래서 이 분류는 “코드를 못 가져온다” 가 아니라 “애초에 문장을 찾으러 간다” 로 읽어야 맞습니다.

그리고 조사가 만들 목록을 지운 적이 있다

진삼국무쌍 편이 그랬습니다. 저는 완벽 회피의 보상이 슬로모션이라고 알고 있어서 시간 조절 장치를 먼저 만들어야 한다고 봤는데, 출처를 대조하니 실제 보상은 자원 획득이었고 슬로모션은 어디서도 확인되지 않았습니다. 선행 조건이 통째로 사라졌습니다.

벤치마킹의 성과를 「가져올 것 N개」로만 세면 이 줄이 안 잡힙니다. 안 만들어도 되게 된 것도 성과인데, 목록에 안 남는 종류라 의식적으로 세지 않으면 사라집니다.

만드는 쪽은 문스튜디오에 있습니다. 여기는 남의 게임을 뜯은 기록이고, 그쪽은 그걸 쓴 결과입니다.