Skip to content

World Format RU

Yahasi edited this page Jul 10, 2026 · 3 revisions

🌐 English · Русский

← Главная · Текстуры →

Формат мира

Система миров

  • Мир — это один файл worlds/<name>.json, владеющий всей сценой: переключатели графики, платформа и полный трансформ каждого объекта (позиция / поворот / масштаб / цвет / привязка, а для источников света — вид / направление / конус / лучи / форма и т.д.).
  • models/ — это чистая библиотека мешей, только файлы <name>.obj. Мир ссылается на меш по имени и задаёт его размещение (отдельного JSON на модель нет).
  • Встроенный редактор сцены (включается Tab или `) позволяет создавать, перемещать, поворачивать, масштабировать, перекрашивать и удалять объекты вживую, а затем сохранять обратно в JSON клавишей F5. См. Управление.
  • Встроенные типы для спавна: cube, sphere, cylinder, cone, pyramid, ramp (клин с наклонной гранью — удобно для скатывания), flatpicture (двусторонняя вертикальная панель с текстурой — постер/билборд, без коллизии), light, camera (размещаемая точка обзора — см. Камеры и HUD), joint (физическая связь двух объектов — см. Физика; хранится в массиве joints ниже, не в objects), плюс каждый меш из models/.
  • Формы платформы: квадрат, прямоугольник или круг, с настраиваемым размером / цветом.
  • Живые тумблеры графики: переключайте тени (F2), BVH-ускорение (F3), свет камеры (F4) и пол-платформу (F6) прямо в сцене — без пересоздания мира. На сервере эти изменения синхронизируются всем клиентам.

Добавление моделей

Положите меш в SampleGame/models/ как <name>.obj (экспортируйте с нормалями вершин для сглаженного затенения; Blender делает это по умолчанию). Модели — чистая библиотека геометрии; размещение (позиция, поворот, масштаб, цвет, привязка, вращение) хранится в мире.

Чтобы разместить модель, либо заспавните её вживую в редакторе (G, чтобы найти в списке спавна, B — заспавнить, расставьте, F5 — сохранить), либо добавьте запись объекта в worlds/<name>.json вручную.

Отредактируйте модель или JSON мира и просто перезапустите — пересборка не требуется.

Объект мира

{
  "id": 0,
  "type": "mesh",
  "mesh": "monkey",
  "position": { "x": 0.0, "y": 0.0, "z": 0.0 },
  "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
  "scale": 1.0,
  "color": "Yellow",
  "anchor": "bottom",
  "rotateSpeed": 1.0,
  "collides": true,
  "gravity": false
}

Общие поля

Поле Значение
type mesh, cube, sphere, cylinder, cone, pyramid, ramp, flatpicture, light или camera.
mesh Имя файла в models/ (без .obj), для type: "mesh".
position Позиция в мире в единицах (Y — вертикальная ось).
rotation Начальный поворот в радианах.
scale Равномерный масштаб.
color hex-строка #RRGGBB (или #RRGGBBAA, где альфа = прозрачность объекта), тройка R,G,B / R,G,B,A, либо имя .NET ConsoleColor (напр. Red). Сохраняется обратно в hex.
colorFade Прозрачность цвета / блёклость, 0–1 (деф 0): выцветает цвет объекта к белому, независимо от альфы.
anchor Как меш располагается: bottom (основание на полу, по умолчанию), center или origin (исходное начало OBJ).
rotateSpeed Автовращение вокруг вертикальной оси, рад/с (0 = статично).

Поля текстуры

Полная система — на странице Текстуры.

Поле Значение
texture Имя PNG-файла из textures/ (напр. "brick.png", "" = нет/плоский цвет). Работает на всех примитивах и импортированных mesh-объектах. В онлайне байты PNG передаются пирам.
textureScale Коэффициент тайлинга UV (деф 1): 2 тайлит 2×2, 0.5 показывает половину.
textureFace Какая грань носит текстуру (деф -1 = все). Для куба 05 выбирают одну сторону (+X, -X, +Y, -Y, +Z, -Z), остальные тогда плоского цвета. У других форм одна грань.
textureFilter Сэмплирование: 0 = nearest (деф), 1 = bilinear, 2 = mipmapped.

Поля физики

См. страницу Физика.

Поле Значение
collides Является ли объект твёрдым (действует только при physics.collisionEnabled = true). Деф true.
gravity Притягивается ли объект гравитацией мира (действует только при physics.gravityEnabled = true). Деф false.
collider Форма коллайдера меша: "aabb" (бокс по мировым осям, деф) или "obb" (ориентированный бокс, поворачивается вместе с ним).
mass Масса в импульсном солвере (деф 1); тяжёлый объект меньше сдвигается при столкновении.
restitution Упругость 0–1; -1 (деф) наследует physics.restitution мира.
friction Коэффициент трения Кулона (деф 0.5).
rollingFriction Сопротивление трения качения (деф 0.05).

Объекты-источники света

Объект light дополнительно использует: power, lightKind (point / directional / spot / area), direction, coneAngle, beamCount, coneShape (circle / square / triangle), lightSize и lightSpin. См. Рендеринг и освещение.

Объекты-камеры

Объект camera использует cameraKind (fixed / follow) и, для Follow-камеры, followTargetId (id объекта для слежения, или -1 = тело игрока). См. Камеры и HUD.

Верхнеуровневый блок physics

"physics": { "gravityEnabled": false, "gravityStrength": 9.8, "collisionEnabled": true, "restitution": 0.0 }

restitution — упругость мира по умолчанию (0–1); отдельные объекты могут её переопределить. В файле мира также есть верхнеуровневые блоки graphics (Shadows / BVH / ExtraLight / DisableCameraLight / Renderer), platform и массив joints (ниже).

Верхнеуровневый массив joints

Шарниры хранятся в своём верхнеуровневом массиве (не в objects) — каждый связывает два объекта или объект с неподвижным миром. Заспавни в редакторе (тип спавна joint) или добавь запись вручную. См. страницу Физика.

"joints": [
  {
    "id": 5, "kind": "hinge", "bodyA": 1, "bodyB": -1,
    "anchorA": { "x": 0, "y": 0, "z": 0 }, "anchorB": { "x": 0, "y": 2, "z": 0 },
    "axis": { "x": 0, "y": 1, "z": 0 },
    "limitEnabled": true, "lowerLimit": -1.0, "upperLimit": 1.0,
    "motorEnabled": false, "motorTargetSpeed": 0.0, "maxMotorTorque": 0.0
  }
]
Поле Значение
kind ballsocket, hinge или distance.
bodyA / bodyB Два id объектов для связи; -1 = неподвижный мир (статическая точка-якорь). Подойдёт любой объект — нефизическая или статичная сторона (свет, предмет, платформа) работает как перемещаемый фиксированный/кинематический якорь.
anchorA / anchorB Якорь в локальной системе каждого тела (или мировая позиция, когда id = -1).
axis (hinge) общая ось вращения.
limitEnabled / lowerLimit / upperLimit (hinge) диапазон-упор угла, в радианах.
motorEnabled / motorTargetSpeed / maxMotorTorque (hinge) тяга с ограничением момента к целевой угловой скорости.
restLength (distance) целевое расстояние между якорями.
springEnabled / frequency / dampingRatio (distance) мягкая пружина (частота в Гц + демпфирование) вместо жёсткого стержня.
collide Сталкиваются ли два связанных тела друг с другом? По умолчанию false. Включай для шарниров с якорями на гранях/рёбрах (напр. настоящей цепи, звенья которой должны упираться, а не проходить насквозь).

Clone this wiki locally