4.1 KiB
Туториал: добавить новый тип блока
Делаем новый воксельный блок (по аналогии с grass-snow, greystone и др.). Время: ~30 минут.
Что у нас есть
Существующие типы блоков описаны в src/editor/engine/CONST/blockTypes.js. У каждого блока:
id(uint16 — компактное хранение в чанках)name(показывается в инспекторе)texture(имя файла изpublic/kubikon-assets/blocks/)solid(true/false — игрок проходит сквозь?)transparent(для стекла — рендер с alpha)- доп. свойства:
breakable,gravity,gluonи т.д.
Шаг 1: Текстура
Текстуры блоков — PNG 256x256, лежат в public/kubikon-assets/blocks/.
Возьми готовую (Kenney воксельные тайлсеты — CC0) или нарисуй сам. Положи как <имя>.png, например my_cool_brick.png.
Шаг 2: Регистрация типа
В src/editor/engine/CONST/blockTypes.js добавь:
export const BLOCK_TYPES = [
// ...существующие...
{
id: 42, // следующий свободный uint16
name: 'Мой кирпич',
texture: 'my_cool_brick.png',
solid: true,
breakable: true,
breakTime: 2.0, // сек. чтобы сломать киркой
category: 'материалы',
},
];
Шаг 3: Проверь в редакторе
npm run dev
# открой http://localhost:5174/edit/sample (standalone-режим)
В сайдбаре «Блоки» → категория «материалы» → твой кирпич должен появиться. Клик → выбор → ставь на ландшафт.
Шаг 4: Тонкая настройка
Самое частое — текстура повёрнута/растянута. Открой src/editor/engine/BlockManager.js, найди _buildFace(). По умолчанию UV-маппинг 1 текстура на грань 1м×1м. Если нужно повторение — поменяй uvScale.
Для не-кубических блоков (ступени, плиты) — см. BlockShape.js.
Шаг 5: Скрипты могут спавнить твой блок
Если блок должен быть доступен в game.scene.placeBlock(type, x, y, z) — добавь его id в whitelist src/editor/engine/scripts/ScriptSandboxAPI.js:ALLOWED_BLOCK_IDS.
Шаг 6: PR
git checkout -b feature/cool-brick-block
git add public/kubikon-assets/blocks/my_cool_brick.png \
src/editor/engine/CONST/blockTypes.js
git commit -m "feat: добавить блок 'Мой кирпич' (id=42)"
git push origin feature/cool-brick-block
Открой PR на https://git.rublox.pro/rublox/studio/pulls.
Подсказки
- Не используй id уже занятые —
grep -c 'id:' blockTypes.jsпокажет сколько типов есть. - Не помещай большие текстуры — 256x256 максимум. Иначе текстурный атлас не влезет в GPU.
solid: falseдля жидкостей — игрок проходит сквозь, но рендерится с прозрачностью.gravity: trueдля песка — блок падает если под ним пусто.
Что делать если блок не появляется
- Проверь Console (F12) — есть ли ошибка про parsing JSON или texture not found.
- Проверь что
textureсовпадает по имени с файлом вpublic/kubikon-assets/blocks/. - Проверь что
idуникальный — два блока с одним id ломают map. - Очисти localStorage браузера (там кешируется состояние редактора):
localStorage.clear()в Console.