TileSets (Тайловые наборы)
Введение
Tilemap - это сетка из тайлов, используемая для создания игрового макета. Использование TileMapLayer для проектирования уровней имеет несколько преимуществ. Во-первых, они позволяют вам нарисовать макет, "рисуя" тайлы на сетке, что намного быстрее, чем размещать отдельные Sprite2D один за другим. Во-вторых, они позволяют создавать большие уровни, поскольку оптимизированы для рисования большого количества тайлов. И, наконец, они позволяют расширить функциональность ваших тайлов с помощью collision, occlusion и navigation shape.
Чтобы использовать узлы TileMapLayer, вам сначала нужно создать TileSet. TileSet — это коллекция тайлов, которые можно разместить в узле TileMapLayer. После создания TileSet вы сможете разместить их используя редактор TileMap.
Чтобы следовать этому руководству, вам понадобится изображение, содержащее ваши тайлы, где каждый тайл имеет одинаковый размер (большие объекты можно разделить на несколько тайлов). Это изображение называется tilesheet. Тайлы не обязательно должны быть квадратными: они могут быть прямоугольными, шестиугольными или изометрическими (псевдо-3D перспектива).
Создание нового TileSet
Tilesheet (страница тайлов)
В этой демонстрации будут использованы следующие названия, взятые из набора ` Kenney's "Abstract Platformer" <https://kenney.nl/assets/abstract-platformer>`__. Мы будем использовать именно этот tilesheet из набора:
Создайте новый узел TileMapLayer, затем выберите его и создайте новый ресурс TileSet в инспекторе:
Создание новог TileSet ресурса в узле TileMapLayer
После создания ресурса TileSet щелкните значение, чтобы развернуть его в инспекторе. Форма тайла по умолчанию — Квадрат, но вы также можете выбрать Изометрическую, Квадрат с половинным смещением или Шестиугольник (в зависимости от формы его изображений). Если вы используете форму тайла, отличную от Квадрата, вам также может потребоваться настроить свойства Tile Layout и Tile Offset Axis. Так же, включение свойства Rendering > UV Clipping может быть полезным, если вы хотите, чтобы тайлы обрезались по их координатам. Это гарантирует, что тайлы не смогут отрисовываться за пределами выделенной им области в tilesheet.
Установите в инспекторе размер тайла 64×64, чтобы он соответствовал примеру tilesheet:
Установите тайла 64×64, чтобы соответствовать примеру tilesheet
Если вы полагаетесь на автоматическое создание тайлов (как мы и собираемся сделать), вы должны задать размер тайла до создания атласа. Атлас определит, какие тайлы из tilesheet могут быть добавлены в узел TileMapLayer (так как не каждая часть изображения может быть допустимым тайлом).
Откройте панель TileSet в нижней части редактора, затем щелкните и перетащите изображение tilesheet на панель. Вам будет предложено создать тайлы автоматически. Ответьте Да:
Автоматическое создание тайлов на основе содержимого изображения tilesheet
Это автоматически создаст тайлы в соответствии с его размером, который вы указали ранее в ресурсе TileSet. Это значительно ускоряет начальную настройку тайла.
Примечание
При использовании автоматической генерации тайлов на основе содержимого изображения, для частей tileset`а, которые полностью прозрачны, тайлы не генерируются.
Если в атласе есть тайлы из tilesheet, которые вы не хотите видеть в атласе, выберите инструмент «Ластик» в верхней части предварительного просмотра набора тайлов, затем щелкните тайлы, которые вы хотите удалить:
Использование инструмента «Ластик» для удаления ненужных тайлов из атласа TileSet
Вы также можете щелкнуть правой кнопкой мыши по тайлу и выбрать Удалить в качестве альтернативы инструменту «Ластик».
Совет
Как и в редакторах 2D и TileMap, вы можете перемещаться по панели TileSet с помощью средней или правой кнопки мыши, а также масштабировать с помощью колесика мыши или кнопок в верхнем левом углу.
Если вы хотите получить тайлы из нескольких tilesheet для одного TileSet, создайте дополнительные атласы и назначьте текстуры каждому из них, прежде чем продолжить. Также можно использовать одно изображение на тайл таким образом (хотя использование tilesheet рекомендуется).
В средней колонке можно настроить свойства атласа:
Настройка свойств атласа TileSet в специальном инспекторе (часть панели TileSet)
В атласе можно настроить следующие свойства:
ID: Идентификатор (уникальный в пределах данного TileSet), используемый для сортировки.
Name: Удобочитаемое имя атласа. Используйте здесь описательное имя для организационных целей (например, «рельеф», «украшение» и т. д.).
Margins: Поля по краям изображения, которые не должны быть выбраны как тайлы (в пикселях). Увеличение этого значения может быть полезным, если вы загружаете изображение tilesheet, которое имеет поля по краям (например, для атрибуции).
Separation: Разделение между каждым тайлом на атласе в пикселях. Увеличение этого значения может быть полезным, если используемое вами изображение tilesheet содержит направляющие (например, контуры между каждым тайлом).
Texture Region Size: Размер каждого тайла на атласе в пикселях. В большинстве случаев это должно соответствовать размеру тайла, определенному в свойстве TileMapLayer (хотя это не строго обязательно).
Use Texture Padding: Если отмечено, добавляет 1-пиксельную прозрачную кромку вокруг каждого тайла, чтобы предотвратить просачивание текстуры при включенной фильтрации. Рекомендуется оставить эту опцию включенной, если только у вас не возникают проблемы с рендерингом из-за текстурной подложки.
Обратите внимание, что изменение поля текстуры, разделения и размера области может привести к потере тайлов (так как некоторые из них будут расположены за пределами координат изображения атласа). Чтобы автоматически регенерировать тайлы из tilesheet, используйте кнопку меню с тремя вертикальными точками в верхней части редактора TileSet и выберите Create Tiles in Non-Transparent Texture Regions (Создать тайлы в непрозрачных областях текстуры):
Автоматическое пересоздание тайлов после изменения свойств атласа
Наборы сцен
You can also place actual scenes as tiles. This allows you to use any collection of nodes as a tile. For example, you could use scene tiles to place gameplay elements, such as shops the player may be able to interact with. You could also use scene tiles to place AudioStreamPlayer2Ds (for ambient sounds), particle effects, and more.
Предупреждение
Тайлы сцен имеют большую нагрузку на производительность по сравнению с атласами, поскольку каждая сцена создается индивидуально для каждого размещенного тайла.
Рекомендуется использовать тайлы сцены только при необходимости. Чтобы рисовать спрайты в тайле без какой-либо сложной манипуляции, или попробуйте атласы.
Для этого примера мы создадим сцену, содержащую корневой узел CPUParticles2D. Сохраните эту сцену в файл сцены (отдельно от сцены, содержащей узел TileMapLayer), затем переключитесь на сцену, содержащую узел TileMapLayer. Откройте редактор TileSet и создайте новую Scenes Collection в левом столбце:
Создание коллекций сцен в редакторе TileSet
После создания коллекции сцен вы можете ввести описательное имя для коллекции сцен в средней колонке, если хотите. Выберите эту коллекцию сцен, затем создайте новый слот сцены:
Создание тайла сцены после выбора коллекции сцен в редакторе TileSet
Выберите этот слот сцены в правом столбце, затем используйте Quick Load (или Load), чтобы загрузить файл сцены, содержащий частицы:
Создание слота сцены, а затем загрузка в него файла сцены в редакторе TileSet
Теперь у вас есть тайл сцены в вашем TileSet. Как только вы переключитесь в редактор TileMap, вы сможете выбрать ее из коллекции сцен и раскрасить ее, как любой другой тайл.
Объединение нескольких атласов в один атлас
Использование нескольких атласов в одном ресурсе TileSet иногда может быть полезным, но в некоторых ситуациях это может быть обременительно (особенно если вы используете одно изображение на тайл). Godot позволяет объединять несколько атласов в один атлас для более простой организации.
Для этого необходимо иметь более одного атласа, созданного в ресурсе TileSet. Используйте кнопку меню «три вертикальные точки», расположенную в нижней части списка атласов, затем выберите Open Atlas Merging Tool:
Открытие инструмента объединения атласов после создания нескольких атласов
Откроется диалоговое окно, в котором вы можете выбрать несколько атласов, удерживая Shift или Ctrl, а затем щелкая по нескольким элементам:
Использование диалогового окна инструмента объединения атласов
Выберите Merge, чтобы объединить выбранные атласы в одно изображение атласа (что преобразуется в один атлас в TileSet). Необъединенные атласы будут удалены в TileSet, но исходные изображения листов тайлов будут сохранены в файловой системе. Если вы не хотите, чтобы необъединенные атласы были удалены из ресурса TileSet, выберите Merge (Keep Original Atlases).
Совет
TileSet имеет систему tile proxies. Прокси тайлов представляют собой таблицу сопоставления, которая позволяет уведомлять TileMap, использующую заданный TileSet, о том, что заданный набор идентификаторов тайлов следует заменить другим.
Прокси тайлов автоматически настраиваются при объединении разных атласов, но их также можно настроить вручную с помощью диалогового окна three vertical dots, доступ к которому осуществляется с помощью меню «три вертикальные точки», упомянутого выше.
Создание прокси тайлов вручную может быть полезным, когда вы меняете идентификатор атласа или хотите заменить все тайлы из атласа на тайлы из другого атласа. Обратите внимание, что при редактировании TileMap вы можете заменить все ячейки на их соответствующие сопоставленные значения.
Назначение пользовательских метаданных тайлам TileSet
Вы можете назначать пользовательские данные для каждой тайлы, используя пользовательские слои данных. Это может быть полезно для хранения информации, специфичной для вашей игры, например, урон, который тайл должен нанести, когда игрок касается его, или можно ли уничтожить его с помощью оружия.
Данные связаны с тайлом в TileSet: все экземпляры размещенного тайла будут использовать одни и те же пользовательские данные. Если вам нужно создать вариант тайла с другими пользовательскими данными, это можно сделать созданием альтернативного тайла и изменением пользовательских данных только для альтернативного тайла.
Создание пользовательского слоя данных в инспекторе ресурсов TileSet (внутри узла TileMapLayer)
Пример настроенных пользовательских слоев данных со свойствами, специфичными для игры
Вы можете изменить порядок пользовательских данных, не нарушая существующие метаданные: редактор TileSet автоматически обновится после изменения порядка свойств пользовательских данных.
В примере пользовательских слоев данных, показанном выше, мы назначаем тайлу метаданные damage_per_second со значением 25 и метаданные destructible со значением false:
Редактирование пользовательских данных в редакторе TileSet в режиме Select
Окраска свойств тайла также может использоваться для пользовательских данных:
Назначение пользовательских данных в редакторе TileSet с помощью рисования свойств тайла
Создание terrain (ландшафтных) наборов (иначе - autotiling)
Примечание
Эта функциональность была реализована в другой форме как autotiling в Godot 3.x. Terrains по сути являются более мощной заменой autotiles. В отличие от autotiles, Terrains могут поддерживать переходы от одного Terrains к другому, поскольку tile может определять несколько Terrains одновременно.
В отличие от предыдущих версий, где autotiles были определенным типом тайлов, terrains (ландшафты)— это всего лишь набор свойств, назначенных тайлам атласа. Затем эти свойства используются специальным режимом рисования TileMap, который выбирает тайлы с данными о ландшафте умным способом. Это означает, что любой тайл ландшафта может быть нарисован как ландшафт или как отдельный тайл, как и любой другой.
«Polished (отполированный)» тайлсет обычно содержит вариации, которые следует использовать на углах или краях платформ, полов и т. д. Хотя их можно размещать вручную, это быстро становится утомительным. Обработка этой ситуации с помощью процедурно сгенерированных уровней также может быть сложной и потребовать большого количества кода.
Godot предлагает terrains для автоматического выполнения такого рода соединения тайлов. Это позволяет вам автоматически использовать «правильные» варианты тайлов.
Ландшафты сгруппированы в наборы ландшафтов. Каждому набору ландшафтов назначается режим из Match Corners and Sides, Match Corners и Match sides. Они определяют, как ландшафты сопоставляются друг с другом в наборе ландшафтов.
Примечание
Вышеуказанные режимы соответствуют предыдущим режимам битовых масок autotiles, используемым в Godot 3.x: 2×2, 3×3 или 3×3 minimum. Это также похоже на то, что есть в редакторе Tiled.
Выберите узел TileMapLayer, перейдите в инспектор и создайте новый набор ландшафта в TileSet resource:
Создание набора ландшафта в инспекторе ресурсов TileSet (внутри узла TileMapLayer)
После создания набора ландшафта вы должны создать один или несколько ландшафтов внутри набора ландшафта:
Создание местности через набор местности
В редакторе TileSet переключитесь в режим Select и щелкните тайл. В средней колонке разверните раздел Terrains, затем назначьте идентификатор набора ландшафта и идентификатор ландшафта для тайла. -1 означает «нет набора ландшафта» или «нет ландшафта», что означает, что вы должны установить Terrain Set на 0 или больше, прежде чем вы сможете установить Terrain на 0 или больше.
Примечание
Идентификаторы набора ландшафта и идентификаторы ландшафта независимы друг от друга. Они также начинаются с 0, а не с 1.
Настройка ландшафта на одном тайле в режиме Select редактора TileSet
После этого вы можете настроить раздел Terrain Peering Bits, который становится видимым в средней колонке. Пиринговые биты определяют, какой тайл будет размещен в зависимости от соседних тайлов. -1 — это специальное значение, которое относится к пустому пространству.
Например, если у тайла все биты установлены на 0 или больше, он появится только в том случае, если все 8 соседних тайлов используют тайл с тем же идентификатором местности. Если у тайла биты установлены на 0 или больше, но верхний левый, верхний и верхний правый биты установлены на -1, он появится только в том случае, если над ним есть пустое место (включая диагональ).
Настройка битов пиринга (peering) ландшафта на одном тайле в режиме Select редактора TileSet
Пример конфигурации для полного tilesheet может выглядеть следующим образом:
Пример полного tilesheet для игры с боковой прокруткой
Пример полного tilesheet для игры с боковой прокруткой с видимыми частями ландшафта
Назначение свойств нескольким тайлам одновременно
Существует два способа назначить свойства нескольким тайлам одновременно. В зависимости от ваших вариантов использования один метод может быть быстрее другого:
Множественное выделение тайлов
Если вы хотите настроить различные свойства для нескольких тайлов одновременно, выберите режим Select в верхней части редактора TileSet:
После этого вы можете выбрать несколько тайлов в правом столбце, удерживая Shift и щелкая по тайлам. Вы также можете выполнить прямоугольное выделение, удерживая левую кнопку мыши и перетаскивая мышь. Наконец, вы можете отменить выделение тайлов, которые уже были выбраны (не влияя на остальную часть выделения), удерживая Shift и щелкая по выбранному тайлу.
Затем вы можете назначить свойства с помощью инспектора в средней колонке редактора TileSet. Только свойства, которые вы измените здесь, будут применены ко всем выбранным тайлам. Как и в инспекторе редактора, свойства, которые различаются на выбранных тайлах, останутся разными, пока вы их не отредактируете.
При использовании числовых и цветовых свойств вы также увидите предварительный просмотр значения свойства на всех тайлах атласа после редактирования свойства:
Выбор нескольких тайлов с помощью режима выбора и последующее применение свойств
Рисование свойств тайлов
Если вы хотите применить одно свойство к нескольким тайлам одновременно, вы можете использовать для этой цели режим окрашивания свойств.
Настройте свойство, которое будет отображаться в среднем столбце, затем щелкните по тайлам (или удерживайте левую кнопку мыши) в правом столбце, чтобы «нарисовать» свойства на тайлах.
Рисование свойств тайла используя редактор наборов Тайлов
Раскрашивание свойств тайла особенно полезно для свойств, настройка которых вручную занимает много времени, например, для форм столкновений:
Рисуем полигон столкновения, а затем щелкаем левой кнопкой мыши по тайлам, чтобы применить его
Создание альтернативных тайлов
Иногда вы хотите использовать одно изображение тайла (встречающееся только один раз в атласе), но настроенное по-разному. Например, вы можете захотеть использовать одно и то же изображение тайла, но повернутое, перевернутое или модулированное другим цветом. Это можно сделать с помощью альтернативных тайлов.
Совет
Начиная с Godot 4.2, вам больше не нужно создавать альтернативные тайлы для поворота или переворота тайлов. Вы можете повернуть любой тайл, помещая его в редактор TileMap, используя кнопки поворота/переворота на панели инструментов редактора TileMap.
Чтобы создать альтернативный тайл, щелкните правой кнопкой мыши базовый тайл в атласе, отображаемом редактором TileSet, затем выберите Create an Alternative Tile:
Создание альтернативного тайла путем щелчка правой кнопкой мыши по базовому тайлу в редакторе TileSet
Если вы находитесь в режиме Select, альтернативный тайл уже будет выбран для редактирования. Если вы не находитесь в режиме выбора, вы все равно можете создавать альтернативные тайлы, но вам нужно будет переключиться в режим Select и выбрать альтернативный тайл, чтобы редактировать его.
Если вы не видите альтернативный тайл, переместитесь вправо от изображения атласа, поскольку альтернативные тайлы всегда отображаются справа от базовых тайлов данного атласа в редакторе TileSet:
Настройка альтернативного тайла после щелчка по нему в редакторе TileSet
После выбора альтернативного тайла вы можете изменить любые свойства, используя средний столбец, как и на базовом тайле. Однако список выставленных свойств отличается от базовых тайлов:
Альтернативный ID: Уникальный числовой идентификатор для этого альтернативного тайла. Его изменение сломает существующие TileMaps, поэтому будьте осторожны! Этот ID также управляет сортировкой в списке альтернативных тайлов, отображаемых в редакторе.
Rendering > Flip H: Если
true- тайл будет отражаться по горизонтали.Rendering > Flip V: Если
true- тайл будет отражаться по вертикали.Rendering > Transpose: Если
true, тайл поворачивается на 90 градусов против часовой стрелки, а затем отражается вертикально. На практике это означает, что для поворота тайла на 90 градусов по часовой стрелке без переворота следует включить Flip H и Transpose. Чтобы повернуть тайл на 180 градусов по часовой стрелке, следует включить Flip H и Flip V. Чтобы повернуть тайл на 270 градусов по часовой стрелке, следует включить Flip V и Transpose.Rendering > Texture Origin: Исходная точка, используемая для рисования тайла. Можно использовать для визуального смещения тайла по сравнению с базовым тайлом.
Rendering > Modulate: Цветовой множитель, используемый при рендеринге тайла.
Рендеринг > Материал: Материал, который будет использоваться для этого тайла. Это можно использовать для применения другого режима смешивания или пользовательских шейдеров к одному тайлу.
Z Index: Порядок сортировки для этого тайла. Более высокие значения заставят тайл отображаться перед другими на том же слое.
Y Sort Origin: Вертикальное смещение для использования при сортировке тайлов на основе их координаты Y (в пикселях). Это позволяет использовать слои так, как будто они находятся на разной высоте для игр сверху вниз. Регулировка этого может помочь устранить проблемы с сортировкой определенных тайлов. Действует только в том случае, если Y Sort Enabled имеет значение
trueв узле TileMapLayer в CanvasItem > Ordering
Вы можете создать дополнительный альтернативный вариант тайла, нажав на большой значок "+" рядом с альтернативным тайлом. Это эквивалентно выбору базового тайла и щелчку правой кнопкой мыши по нему, чтобы снова выбрать Create an Alternative Tile.
Примечание
При создании альтернативного тайла ни одно из свойств базового не наследуется. Вам нужно снова задать свойства альтернативного тайла, если вы хотите, чтобы они были идентичными.