---
type: reference
title: 커스텀 게임 대시보드 스키마
summary: 커스텀 게임이 매니페스트가 없으니 그 맞춤화 가능한 필드를 대시보드에서 축별로 어떻게 선언하는지, 그리고 각 축이 받는 필드 타입.
---

마켓플레이스 게임은 각 맞춤화 프리셋이 어떤 필드를 설정할 수 있는지 선언하는 `caputchin.json` 매니페스트를 냅니다. 커스텀 게임에는 매니페스트가 없으니, 대신 **당신이 그 필드 스키마를 대시보드에서 선언합니다**. 당신은 커스텀 게임마다, 축마다 그것을 한 번 정의한 다음, 그것을 상대로 프리셋을 작성합니다; 거기서부터 그것은 같은 요금제 등급에서 마켓플레이스 게임과 정확히 똑같이 [해소되어 적용됩니다](/docs/game-customization/overview).

이 페이지는 그 스키마의 레퍼런스입니다. 게임 자체를 작성하는 것은 [자체 호스팅 게임 빌드하기](/docs/custom-game-development/self-hosted-game)를; 고객 측 등록 흐름은 [커스텀 게임](/docs/game-customization/custom-games)을 보세요.

## 축마다 하나의 스키마

커스텀 게임의 스키마는 **축마다** 선언되고, 세 축은 독립적입니다:

| 축 | 무엇을 맞춤화하는가 | 스키마 |
|---|---|---|
| **로케일** | 게임의 번역된 문자열. | 암묵적: 로케일 필드는 늘 평이한 텍스트라, 선언할 것이 없습니다; 문자열 프리셋을 직접 작성합니다. |
| **스킨** | 색상, 시각 자산, 그리고 표현 손잡이. | 스킨 프리셋이 설정할 수 있는 색상, 자산, 스칼라(토글 / 숫자 / 범위 / 선택) 필드를 선언합니다. |
| **구성** | 게임플레이 옵션(난이도, 카운트, 토글). | 구성 프리셋이 설정할 수 있는 옵션 필드를 선언합니다. |

당신은 게임이 실제로 쓰는 축에만 스키마를 정의합니다. 스키마가 없는 축은 그저 그 종류의 맞춤화 가능한 필드가 없습니다.

## 필드 타입

스키마는 이름 붙은 필드 묶음이며, 각각 타입을 가집니다. 필드 타입은 나머지 맞춤화가 쓰는 것과 같은 묶음입니다; [맞춤화 스키마 레퍼런스](/docs/references/customization-schema)가 모든 타입과 그것이 받는 값의 권위 있는 설명입니다. 요약하면:

| 타입 | 값 |
|---|---|
| `string` | 자유 텍스트. |
| `boolean` | `true` 또는 `false`. |
| `number` | 임의의 유한한 숫자. |
| `range` | 최솟값과 최댓값 안의 숫자. |
| `list` | 고정된 옵션 묶음 중 하나. |
| `link` | `http`/`https` URL. |
| `color` | hex 또는 `rgb()` 색상. |
| `image` | 이미지 URL 또는 업로드. |
| `audio` | 오디오 URL 또는 업로드. |
| `video` | 비디오 URL 또는 업로드. |

로케일은 `string`만 씁니다(그리고 해소기는 로케일 스키마를 전혀 검증하지 않습니다). 스킨과 구성은 작성된 값을 당신이 선언한 스키마를 상대로 검증하고 그 타입에 맞지 않는 값을 떨굽니다.

## 범위: 스키마가 사는 곳

커스텀 게임 스키마는 [재정의](/docs/troops/overrides)와 같은 범위 모델인 **팀 또는 사이트 키** 범위에서 설정됩니다. 팀과 그 사이트 키 중 하나가 같은 게임과 축에 대해 스키마를 선언하면, 그 축에 대해 **사이트 키의 스키마가 팀의 것을 대체합니다**(필드별 병합이 아니라 축 전체 대체). 이것은 나머지 맞춤화가 가장 구체적인 것이 이깁니다로 해소되는 방식을 비춥니다.

## 자산은 절대적입니다

플레이 가능한 게임을 당신이 직접 호스팅하므로, 상대 자산 경로를 상대로 해소할 플랫폼 번들이 없습니다. 스킨 프리셋의 어떤 `image`, `audio`, `video` 값이든 **절대 URL**이어야 합니다. (마켓플레이스 게임은 번들 상대 경로를 쓸 수 있습니다; 커스텀 게임은 못 씁니다.)

## 프리셋이 게임에 닿는 방식

스키마와 프리셋이 존재하면, Caputchin은 각 방문자에 대해 축마다 하나의 프리셋을 해소하고(사이트 키, 팀, 당신의 기본값에 걸쳐 가장 구체적인 것이 이깁니다) 해소된 값을 [게임 팩토리의 컨텍스트](/docs/custom-game-development/self-hosted-game)를 통해 당신의 게임에 전달합니다: `ctx.locale`, `ctx.skin`, `ctx.config`. 당신의 게임은 그 객체들에서 자기 자신의 필드 이름을 읽습니다. 스키마는 대시보드 편집기가 맞는 입력을 보이게 하고, 값이 방문자에 닿기 전에 그것을 검증하는 것입니다.

## 함께 보기

- [맞춤화 스키마 레퍼런스](/docs/references/customization-schema): 모든 필드 타입과 그 받는 값, 전부.
- [커스텀 게임](/docs/game-customization/custom-games): 커스텀 게임 등록과 그 스키마 정의하기.
- [자체 호스팅 게임 빌드하기](/docs/custom-game-development/self-hosted-game): 팩토리 컨텍스트에서 해소된 프리셋 읽기.
- [팀 재정의](/docs/troops/overrides): 스키마가 따르는 범위 모델.
