Создание Tilemap

уроки и различная документация по Godot Engine

Сообщение Создание Tilemap
» 01 июл 2015, 21:13

Введение
Tilemaps это простой и быстрый способ создания уровней 2D игры. По сути вы берете множество тайтлов, которые могут быть использованы столько раз, сколько вы хотите:

Изображение


В тайтлы так может быть добавлена коллизия, что позволит создавать 2D сайдскройлер или топдаун игры.

Создание тайтлсетов
Для начала, тайтлсет должен быть сделан. Вот несколько тайтлов для него. Они все находятся в одном файле - тайлсете, так как это традиционный формат хранения тайловой графики в играх. Разберемся как Godot распознает тайлсет.

Изображение


Создайте новый проект и добавьте вышеупомянутое png внутрь.

Создание тайтлсет сцены
Нам надо создать TileSet ресурс. Этот ресурс предоставляет нужные свойства, это довольно трудоемко и трудно:

Изображение


Там достаточно свойств, чтобы выполнить задачу и с некоторым усилием этот способ будет работать. Но есть способ попроще редактировать и управлять тайтлсетом - это воспользоваться инструментами экспорта!

Тайтлсет сцена
Создайте новую сцену с пустым нодом или node2d в корне. Для каждого тайтла будет добавлен новый спрайт. Так как тайтлы у нас 50х50, включение сетки может быть хорошей идеей.

Если в исходном изображении присутствует больше одного тайтла, с помощью свойства Region определите область спрайта (укажите координаты, ширину, высоту), тогда нод, чей регион вы изменили будет показывать только описанную область тайлсета, по умолчанию он будет показываеть весь тайлсет.

Наконец убедитесь, что назвали свой нод спрайта правильно. Это гарантирует, что при последующем редактировании тайтлсета (например добавлении коллизии, изменении области и т.д.) тайтл будет все еще определяться правильно и обновляться. Это имя должно быть уникальным.

Кажется, это много требований, потому вот скриншот на котором есть все, что имеет к этому отношение:

Изображение


Продолжайте добавлять на сцену спрайты и корректировать их регионы, пока каждый тайтл не окажется в своем спрайте. И помните, что их имена должны быть уникальными.

Изображение


Коллизии
Чтобы добавить коллизию тайлу, создайте дочерний нод StaticBody2D к каждому спрайту. Это нод статического физического тела. Затем, как дочерние нод к StaticBody2D, создайте нод CollisionShape2D (предопределенная форма тела) или CollisionPolygon (произвольная форма тела). Рекомендуем последний, так как его проще редактировать:

Изображение


Наконец, отредактируйте полигон, он теперь сможет реагировать на коллизии. Не забывайте использовать сетку! Используя сетку удостоверьтесь, что полигоны коллизии выровнены должным образом, позволяя персонажу легко ходить от одного тайтла к другому. Также не масштабируйте и не перемещайте коллизию, и/или узлы полигона коллизии. Оставьте их с параметрами offset 0,0, scale 1,1 и rotation 0 по отношению к родительскому спрайту.

Изображение


Добавьте аналогично физику к остальным тайлам, кроме спрайта BG, этот тайл мы будем использовать для декорирования

Изображение


Окей! Мы закончили! Не забудьте сохранить сцену для будущего редактирования. Назовем ее "tileset_edit.scn", или как-то так.

Экспорт тайтлсета
С созданной и открытой в редакторе сценой, следующим шагом будет создание тайтлсета. Используйте главное меню Scene > Convert To > Tile Set:

Изображение


Выберите имя файла, например “mytiles.res”. Убедитесь, что опция “Merge With Existing” включена. Таким образом, каждый раз когда файл ресурсов тайтлсета изменяется, существующие тайтлы объединяются и обновляются (на них ссылается их уникальное имя. Потому снова повторяю, называйте свои тайтлы правильно).

Изображение


Использование TileSet в TileMap
Создайте новую сцену, используйте любой нод или node2d как корень, затем создайте тот самый TileMap, о котором говорилось в начале урока, как дочерний нод.

Изображение


Перейдите к свойству tileset этого нода, и присвойте ему тайтлсет созданный на предыдущих этапах:

Изображение


Установите значение cell size на ‘50’, так как это размер используемых нами тайтлов. Значение параметра Quadrant size, означает что движок будет получать и обрабатывать тайтлсет в блоках 16x16 тайтлов. В большинстве случаев это значение прекрасно подходит и его не нужно изменять, но его можно использовать, чтобы настроить производительность в конкретных случаях (если вы знаете, что делаете).

Рисование вашего мира
Убедитесь, что выбран нод TileMap со всем набором тайтлов. На экране появится красная сетка, позволяющая рисовать в ней с выбором тайтла на палитре слева.

Изображение


Чтобы избежать перемещения и случайного выбора нода tilemap (что возможно, учитывая его размеры), рекомендуется заблокировать его используя кнопку блокировки:

Изображение


Очень важно: Артефакты смещения и масштабирования
Использование одинаковой текстуры для всех тайтлов, масштабирование тайтлсета (или даже перемещение на несколько пикселей) скорее всего приведет к появлению артефактов, как этот:

Изображение


Этого нельзя избежать, так как это способ работы билинейного аппаратного фильтра. Вот несколько способов избежать такой ситуации, выбирайте тот, который вам больше подходит:
  • Используйте по одному изображению для каждого тайтла. Это удалит все артефакты, но в реализации может оказаться очень громоздким, потому сначала попробуйте варианты ниже.
  • Отключите фильтрацию тайтлсет текстуры или для всей загрузки изображений (Смотри туториал по обработке Image Files асетов)
  • Используйте пиксельную сетку (В ΅Scene -> Project Settings -> rasterizer/uxe_pixel_snap" значение true).
  • Масштабирование области просмотра часто может помочь уменьшить карту (Смотри туториал Viewports).
Аватара пользователя

Участник
Сообщений: 229
Я тут с 09 апр 2015
Репутация 24 [ ? ]

Сообщение Создание Tilemap
» 11 сен 2017, 21:41

Этот урок бесполезен из-за отсутствия картинок...
Аватара пользователя

Участник
Сообщений: 1093
Я тут с 24 авг 2017
Откуда: Краснодар, Россия, Земля, Солнечная система, Млечный путь
Двиг: Construct2
Лицензия: Personal
Репутация 81 [ ? ]

Сообщение Создание Tilemap
» 12 сен 2017, 10:12

WarThunder, это твой комент бесполезен. А урок и без картинок норм. Ступай обратно, в раздел с С2. Рано тебе еще тут выражать свое мнение. :hii:
Ваше нажатие кнопки "Поблагодарить" за помощь - нереально тешит мое ЧСВ и дает силы помогать остальным! ;)
Хватит выпрашивать исходники! Включайте мозг, если есть, конечно!.. :)
Отличие лицензий на контент!
Изображение
Аватара пользователя

Игродел + TDS
Сообщений: 2727
Я тут с 18 авг 2014
Репутация 350 [ ? ]



Вернуться в Уроки по Godot Engine

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх