게임 만들기
엔진도 차원도 라이선스도 달라서 코드가 한 줄도 안 넘어옵니다. 넘어오는 건 문장으로 줄어드는 규칙뿐입니다.
게임 쪽을 뜯는 자리. 이펙트 샌드박스, 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개」로만 세면 이 줄이 안 잡힙니다. 안 만들어도 되게 된 것도 성과인데, 목록에 안 남는 종류라 의식적으로 세지 않으면 사라집니다.
만드는 쪽은 문스튜디오에 있습니다. 여기는 남의 게임을 뜯은 기록이고, 그쪽은 그걸 쓴 결과입니다.