Использование GridMaps (карты тайлов)
Введение
Gridmaps - это инструмент для создания 3D уровней игры, подобно тому, как TileMap работает в 2D. Вы начинаете с предопределённой коллекции 3D сеток (библиотека MeshLibrary), которые могут быть размещены на сетке, как если бы вы строили уровень из неограниченного количества блоков Lego.
Столкновения и навигацию также можно добавить к сеткам, как это делается с тайлами tilemap`ов.
Пример проекта
Чтобы узнать как работают GridMaps, скачайте тестовый проект : gridmap_starter.zip.
Распакуйте этот проект и добавьте его в Менеджер проектов, нажав кнопку "Import". Возможно, появится всплывающее окно с предложением конвертировать проект в более новую версию Godot. Нажмите Convert project.godot.
Создание MeshLibrary
Для начала вам понадобится MeshLibrary, которая представляет собой коллекцию отдельных сеток, которые могут быть использованы в gridmap. Откройте сцену "mesh_library_source.tscn", чтобы посмотреть пример настройки библиотеки сеток.
Как вы можете видеть, в этой сцене Node3D - корневой узел, с ним - несколько дочерних MeshInstance3D узлов.
Если вам не нужна физика в вашей сцене, то всё готово. Однако в большинстве случаев вы захотите назначить тела столкновения сеткам.
Коллизии
Вы можете вручную назначить StaticBody3D и CollisionShape3D для каждой сетки. В качестве альтернативы можно использовать меню "Mesh" для автоматического создания тела столкновения на основе данных сетки.
Обратите внимание, что тело столкновения "Convex" будет лучше работать для простых сеток. Для более сложных форм выберите "Create Trimesh Static Body". После того как каждой сетке назначено физическое тело и форма столкновения, ваша библиотека сеток готова к использованию.
Материалы
При генерации библиотеки сеток используются только материалы из сеток. Материалы, установленные на узле, игнорируются.
Lightmaps (Карты освещения)
Карты освещения можно запекать на GridMap. Данные карт освещения UV2 будут повторно использованы из сеток, если они уже есть. Если данные UV2 отсутствуют, они будут автоматически сгенерированы при запекании с размером текселя карты освещения 0,1 единицы. Чтобы сгенерировать данные UV2-карт освещения с другим размером текселя, можно установить режим глобального освещения в панели импорта на Static Lightmap и указать там размер текселя. Этот параметр необходимо изменить до преобразования сцены в MeshLibrary, так как последующее изменение не повлияет на существующие данные MeshLibrary.
За исключением этой особенности, процесс запекания карты освещения ничем не отличается от процесса запекания любой другой 3D-сцены. Подробнее о запекании карты освещения см. в документе Использование глобального освещения LightmapGI.
Формат MeshLibrary
Подводя итог конкретным ограничениям формата MeshLibrary, сцена MeshLibrary имеет Node3D в качестве корневого узла и несколько дочерних узлов, которые станут элементами MeshLibrary. Каждый дочерний узел корневого узла должен:
Быть MeshInstance3D, который станет элементом MeshLibrary. Только эта визуальная сетка будет экспортирована.
Поместите материал в слот материала сетки, а не в слоты материала MeshInstance3D.
Иметь до одного StaticBody3D потомка, для столкновения. StaticBody3D должен иметь одного или более CollisionShape3D потомков.
Иметь до одного дочернего элемента NavigationRegion3D для навигации. NavigationRegion3D может иметь один или несколько дополнительных дочерних элементов MeshInstance3D, которые могут быть запечены для навигации, но не будут экспортированы как визуальная сетка.
Распознается только этот конкретный формат. Другие типы узлов, размещенные как дочерние, не будут распознаны и экспортированы. GridMap — это не универсальная система для размещения узлов на сетке, а скорее специальная оптимизированная система, предназначенная для размещения сеток с коллизиями и навигацией.
Экспорт MeshLibrary
Чтобы экспортировать библиотеку, нажмите Scene > Export As... > MeshLibrary... и сохраните ее как ресурс.
Вы можете найти уже экспортированную MeshLibrary в проекте под названием MeshLibrary.tres.
Использование GridMap
Создайте новую сцену и добавьте узел GridMap. Добавьте библиотеку сеток, перетащив файл ресурсов из дока FileSystem в свойство Mesh Library в Инспекторе.
Инспектор недвижимости
Параметр Physics Material позволяет переопределить физический материал для каждой сетки в NavigationMesh.
В разделе Cells свойство Size должно быть установлено равным размеру ваших сеток. Для демонстрации можно оставить значение по умолчанию. Снимите флажок со свойства Center Y.
Параметры Collision позволяют задать слой столкновений, маску столкновений и приоритет для всей сетки. Подробнее об этом см. в разделе Физика.
В разделе Navigation находится опция "Bake Navigation". Если она включена, она создаёт навигационную область для каждой ячейки, использующей элемент библиотеки сеток с навигационной сеткой.
Если щелкнуть по самой MeshLibrary в инспекторе, можно настроить параметры отдельных сеток, например, их навигационную сетку, навигационные слои или отбрасывание сеткой теней.
Панель GridMap
В нижней части редактора находится панель GridMap, которая должна была открыться автоматически при добавлении узла GridMap.
Слева направо на панели инструментов:
Transform: добавляет к сцене элемент, позволяющий изменять относительное положение и поворот сетки на сцене.
Selection: В активном состоянии вы можете выбрать область в окне просмотра, щелкнуть и перетащить, чтобы выбрать более одного пространства на сетке.
Erase: В активном режиме щелкните в области просмотра и удалите сетки.
Paint: В активном режиме щелкните в области просмотра и добавьте в сцену любую сетку, выбранную в данный момент на панели GridMap.
Pick: Если щелкнуть gridmap сетки в области просмотра, когда она активна, она будет выбрана на панели GridMap.
Fill: Заполните область, выбранную в окне просмотра, сеткой, выбранной на нижней панели GridMap.
Move: Переместить любую сетку или сетки, выбранные в данный момент в области просмотра.
Duplicate: Создать копию выбранной сетки или сеток в GridMap.
Delete: Аналогично стиранию, но для всей выделенной области.
Cursor Rotate X: При выборе инструмента рисования сетка, которую нужно нарисовать, будет вращаться по оси X. Кроме того, будут вращаться выбранные области, если они перемещаются.
Cursor Rotate Y: При выборе инструмента рисования сетка, которую нужно нарисовать, будет вращаться по оси Y. Кроме того, будут вращаться выбранные области, если они перемещаются.
Cursor Rotate Z: При выборе инструмента рисования сетка, которую нужно нарисовать, будет вращаться по оси Z. Кроме того, будут вращаться выбранные области, если они перемещаются.
Change Grid Floor: Регулирует, на каком этаже в данный момент ведутся работы. Можно изменить с помощью стрелок или ввода текста
Filter Meshes: Используется для поиска определенной сетки на нижней панели.
Zoom: Управляет уровнем масштабирования сеток на нижней панели.
Layout toggles: Эти две кнопки переключают различные макеты сеток на нижней панели.
Tools dropdown: Эта кнопка открывает раскрывающееся меню с несколькими дополнительными опциями.
Нажатие на Settings в этом раскрывающемся списке открывает окно, в котором можно изменить Pick Distance, которое представляет собой максимальное расстояние, на котором плитки могут быть размещены на GridMap, относительно положения камеры (в метрах).
Использование GridMap в коде
Подробности о методах и переменных-членах узла см. в GridMap.