Тайл-карты
Система тайлмапа позволяет вам рисовать миры на основе тайлов с помощью масок автотайлинга, нескольких слоёв и вертикальной экструзии стен со встроенной генерацией столкновений.
Добавление тайлмапа
Добавьте Tilemap_Component к любой сущности. Тайлмап центрируется по позиции сущности и охватывает сетку из чанков (каждый 32×32 тайла). Общий размер в тайлах равен width_in_chunks × 32 на height_in_chunks × 32.
Свойства тайлмапа
Ширина / высота в чанках
Размер сетки тайлов. Каждый чанк — 32×32 тайла. Тайлмап 10×10 даёт 320×320 тайлов.
Слои настраиваются отдельно после входа в режим редактирования (см. ниже).
Скриптинг во время выполнения
Tilemap_Component предоставляет те же постоянные данные слоёв, которые использует редактор. Слои адресуются индексом, начинающимся с нуля. Удаление слоя сдвигает все последующие индексы на один вниз, поэтому не сохраняйте индекс после удаления слоя, если не обновите его.
CSL
tilemap := entity.get_component(Tilemap_Component);
ground := tilemap.add_layer(.GROUND);
tilemap.set_layer_tile_size(ground, 1.5);
tilemap.set_layer_tint(ground, v4{0.8, 0.9, 1, 1});
tilemap.add_layer_texture(ground, get_asset(Texture_Asset, "tiles/grass.png"), 1);
tilemap.set_layer_mask(ground, get_asset(Texture_Asset, "$AO/tile_mask.png"));
tilemap.set_tile(ground, 10, 12);
world_position := tilemap.tile_to_world(ground, 10, 12);
tile_x, tile_y := tilemap.world_to_tile(ground, world_position);Изменения тайлмапа в CSL — это обычное состояние сцены. Они участвуют в предсказании, откате и серверной синхронизации так же, как и другие игровые данные CSL.
C#
Вызовы C# изменяют только текущую симуляцию. Для изменения во время работы в многопользовательском режиме используйте существующий поток RPC в игре, чтобы выполнить то же изменение на каждом пиру; API тайлмапа не создаёт новый канал репликации.
API рантайма включает:
Изменение размераразмеры чанков/тайлов и преобразование локальных/мировых координат с учётом слоя.Добавление, удаление и очистка слоёв, их тип, режим/порядок отрисовки, размер тайлов, тинт, маски, контуры, настройки стен и столкновений.
Добавление, замена, изменение веса, удаление и поиск текстур с весами.
Операции запроса, установки и очистки отдельных тайлов.
Тайлмапы имеют размер не менее 2×2 чанков. При изменении размера сохраняется центр карты, существующие координаты тайлов смещаются на половину разницы размеров, а тайлы за пределами новых границ обрезаются. Записи тайлов вне границ ничего не делают, а запросы возвращают false. Веса текстур должны быть неотрицательными, и каждый слой поддерживает не более 256 текстур.
Недопустимые индексы слоёв или текстур и недопустимые настройки слоя отклоняются на границе скриптового API. В C# выбрасывается ArgumentOutOfRangeException (или ArgumentException для ограничения по количеству текстур), тогда как CSL сообщает об ошибке скрипта, содержащей недопустимое значение и допустимый диапазон.
Тинт слоя умножает весь слой целиком, включая контуры и верхушки стен. Изменения тинта применяются как uniform отрисовки и не пересобирают тайлы и не перестраивают столкновения. Несколько изменений тайлов и столкновений, сделанных до следующего обновления тайлмапа, объединяются в одну перестройку геометрии/столкновений.
Режим редактирования
Выберите сущность тайлмапа и нажмите Редактировать кнопку в инспекторе, чтобы войти в режим редактирования тайлмапа. Нажмите Отмена чтобы выйти. Режим редактирования автоматически деактивируется, если вы снимете выделение с сущности.
Во время редактирования красная рамка обводит границы тайлмапа, а в окне сцены рисуется сетка.
Инструменты
В редакторе тайлмапа есть три режима инструментов, переключаемые горячими клавишами:
Кисть
B/W
Рисуйте тайлы, нажимая и перетаскивая.
Ластик
E
Удаляйте тайлы, нажимая и перетаскивая.
Штамп
S/R
Выберите область для копирования, затем вставьте её в другое место.
Вы также можете удерживать Shift в режиме кисти, чтобы временно стирать.
Рисование кистью
Нажмите и перетащите, чтобы рисовать тайлы на выбранном слое. Кисть использует интерполяцию линии Брезенхэма между кадрами, поэтому вы никогда не пропускаете тайлы, даже при быстром перемещении.
Размер кисти настраивается с помощью [ и ] (диапазон 1–32). Кисть круглая — затрагиваются тайлы внутри радиуса.
Alt+click рисует прямую линию от позиции вашего последнего щелчка до текущего тайла, что полезно для длинных прямых краёв.
Ctrl+drag переключает в режим прямоугольного заполнения — перетащите, чтобы задать прямоугольник, и все тайлы в области будут заполнены (или стёрты, если также удерживается Shift), когда вы отпустите кнопку.
Слои
Каждый тайлмап поддерживает несколько слоёв. Щёлкните слой в инспекторе, чтобы выбрать его для рисования. Выбранный слой подсвечивается синим.
Добавление и удаление слоёв
Нажмите Добавить слой внизу, чтобы создать новый слой.
Нажмите Удалить слой внутри панели слоя, чтобы удалить его.
Свойства слоя
Тип
Земля или Стена. Тайлы земли плоские; тайлы стены вытягиваются вертикально.
Режим слоя
По умолчанию использует автоматическую раскладку по слоям (земля позади игрока, стены упорядочиваются по Y). Вручную позволяет задать фиксированное значение слоя отрисовки.
Ручной слой
Показывается только в ручном режиме. Явное значение слоя отрисовки.
Размер тайла
Визуальный размер каждого тайла в мировых единицах.
Тинт
Множитель цвета для всего слоя целиком, включая верхушки стен и контуры.
Текстуры
Одна или несколько текстур с весами для случайного разнообразия. Движок хеширует координаты тайлов, чтобы детерминированно выбирать текстуру для каждого тайла на основе весов.
Маска
Текстура сетки 8×8, используемая для автотайлинга. Каждая ячейка соответствует различной конфигурации соседства (рёбра, углы, изолированные и т. д.). В комплект входит карта по умолчанию $AO/tile_mask.png
Контур
Цвет контуров тайлов (альфа 0 = без контура).
Вариативность нескольких текстур
Каждый слой может иметь несколько текстур с весами. Тайлы детерминированно выбирают вариант текстуры на основе хеша координат своей сетки, поэтому рисунок стабилен между сохранениями и не смещается при добавлении/удалении тайлов.
Отрегулируйте вес рядом с каждой текстурой, чтобы управлять тем, как часто она появляется относительно других.
Автотайлинг
Тайлы автоматически выбирают правильную ячейку маски на основе своей 8-направленной конфигурации соседей. Система:
Проверяет всех 8 соседей (N, NE, E, SE, S, SW, W, NW).
Диагональные соседи учитываются только если присутствуют оба смежных кардинальных соседа (это предотвращает визуальные артефакты в углах).
Сопоставляет полученную 8-битную маску соседства с одной из 64 ячеек в текстуре маски 8×8.
Это означает, что вам нужно лишь рисовать присутствие тайлов — правильные визуальные элементы края, угла и внутренней области вычисляются автоматически.
Слои стен
Установка типа слоя в Стена включает вертикальную экструзию. Тайлы стены размещаются в сетке как тайлы земли, но каждый установленный тайл создаёт колонну телесных тайлов, простирающуюся вверх на Высота стены.
Свойства стены
Высота стены
Высота каждой колонны стены в тайлах (минимум 2).
Текстура верха
Отдельная текстура для верхнего ряда стены («крышки»).
Маска верха
Текстура маски для верха стены (использует тот же автотайлинг по 8 соседям, что и земля).
Контур верха
Цвет контура для тайлов верха стены.
Тела стен используют основную текстуру слоя. Верхушки стен используют соседей базового ряда, что позволяет сохранить края крышки чистыми.
Стены упорядочиваются по Y относительно своего базового ряда, поэтому игроки проходят позади стен, находящихся выше их, и перед стенами ниже.
Столкновения стен
Столкновения
Создаёт рёбра препятствий для перестроения навмеша.
Внутрь
Сдвигает рёбра столкновений внутрь от границ тайлов для более плотного соприкосновения.
Смещение
Сдвигает все рёбра столкновений на фиксированную величину.
Отладочная визуализация
Рисует зелёные рёбра столкновений в окне сцены для отладки.
Когда столкновения включены, движок строит рёбра препятствий по открытым границам тайлов. Навмеши с включённым автоматическим перестроением подхватывают эти рёбра.
Инструмент штампа (копирование и вставка)
Нажмите S чтобы переключиться в режим штампа. Это включает рабочий процесс выделения области:
Выделение: Щёлкните и перетащите, чтобы выделить прямоугольную область. Выбранные тайлы копируются в буфер обмена. Всплывающее окно «Скопировано» подтверждает действие.
Вставка: Нажмите
Ctrl+Vчтобы войти в режим призрака. Полупрозрачный предварительный просмотр буфера обмена следует за курсором.Поворот: Прокрутите колёсико мыши, чтобы поворачивать предварительный просмотр призрака с шагом 90 градусов.
Размещение: Щёлкните, чтобы разместить тайлы штампа. Удерживайте Shift при щелчке, чтобы разместить несколько копий, не выходя из режима призрака.
Отмена: Нажмите
Escapeчтобы выйти из режима призрака без размещения.
Удерживайте Ctrl при начале выделения штампа, чтобы копировать тайлы из всех слоёв сразу, сохраняя многослойные структуры.
Сводка горячих клавиш
B или W
Переключиться на инструмент кисти
E
Переключиться на инструмент ластика
S или R
Переключиться на инструмент штампа
Shift (удерживается)
Временно стирать в режиме кисти
[ / ]
Уменьшить / увеличить размер кисти
Ctrl+drag
Прямоугольное заполнение активным инструментом кисти или ластика
Alt+click
Нарисовать прямую линию от последнего щелчка
Ctrl+V
Войти в режим вставки/призрака
Колёсико мыши
Повернуть предварительный просмотр призрака (в режиме призрака)
Shift+click
Разместить несколько копий (в режиме призрака)
Escape
Отменить режим призрака
Последнее обновление