GridMap
Наследует: Node3D < Node < Object
Узел для 3D-карт на основе плиток.
Описание
GridMap позволяет интерактивно размещать меши на сетке. Он работает как в редакторе, так и через скрипты, что помогает создавать внутриигровые редакторы уровней.
GridMap использует MeshLibrary, содержащую список тайлов. Каждый тайл — это меш с материалами плюс опциональные формы столкновений и навигации.
GridMap содержит коллекцию ячеек. Каждая ячейка сетки ссылается на тайл в MeshLibrary. Все ячейки карты имеют одинаковые размеры.
Внутренне GridMap разделён на разреженную коллекцию октантов для эффективного рендеринга и обработки физики. Каждый октант имеет одинаковые размеры и может содержать несколько ячеек.
Примечание: GridMap не наследует от VisualInstance3D, поэтому не может быть скрыт или маскирован через VisualInstance3D.layers. Если свет не влияет на первый слой, весь GridMap не будет освещён этим источником света.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Методы
void |
clear() |
void |
|
get_bake_mesh_instance(idx: int) |
|
get_basis_with_orthogonal_index(index: int) const |
|
get_cell_item(position: Vector3i) const |
|
get_cell_item_basis(position: Vector3i) const |
|
get_cell_item_orientation(position: Vector3i) const |
|
get_collision_layer_value(layer_number: int) const |
|
get_collision_mask_value(layer_number: int) const |
|
get_meshes() const |
|
get_navigation_map() const |
|
get_orthogonal_index_from_basis(basis: Basis) const |
|
get_used_cells() const |
|
get_used_cells_by_item(item: int) const |
|
local_to_map(local_position: Vector3) const |
|
void |
make_baked_meshes(gen_lightmap_uv: bool = false, lightmap_uv_texel_size: float = 0.1) |
map_to_local(map_position: Vector3i) const |
|
void |
resource_changed(resource: Resource) |
void |
set_cell_item(position: Vector3i, item: int, orientation: int = 0) |
void |
set_collision_layer_value(layer_number: int, value: bool) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
void |
set_navigation_map(navigation_map: RID) |
Сигналы
cell_size_changed(cell_size: Vector3) 🔗
Вызывается при изменении cell_size.
changed() 🔗
Вызывается при изменении MeshLibrary данной GridMap.
Константы
INVALID_CELL_ITEM = -1 🔗
Недопустимый элемент ячейки, который можно использовать в set_cell_item() для очистки ячеек (или представлять пустую ячейку в get_cell_item()).
Описания свойств
Если true, этот GridMap создает навигационную область для каждой ячейки, которая использует элемент mesh_library с навигационной сеткой. Созданная навигационная область будет использовать битовую маску навигационных слоев, назначенную элементу MeshLibrary.
Если true, элементы сетки центрируются по оси X.
Если true, элементы сетки центрируются по оси Y.
Если true, элементы сетки центрируются по оси Z.
Размер каждого октанта измеряется в количестве ячеек. Это относится ко всем трем осям.
Масштаб элементов ячеек.
Это не влияет на размер самих ячеек сетки, а только на элементы в них. Это можно использовать, чтобы элементы ячеек перекрывали своих соседей.
Vector3 cell_size = Vector3(2, 2, 2) 🔗
Размеры ячеек сетки.
Это не влияет на размер ячеек. См. cell_scale.
Физические слои, в которых находится этот GridMap.
GridMaps действуют как статические тела, то есть на них не влияет гравитация или другие силы. Они влияют только на другие физические тела, которые сталкиваются с ними.
Физические слои, в которых этот GridMap обнаруживает столкновения. Для получения дополнительной информации см. Слои и маски столкновений в документации.
float collision_priority = 1.0 🔗
Приоритет, используемый для решения столкновений при возникновении проникновения. Чем выше приоритет, тем ниже будет проникновение в объект. Это может быть использовано, например, для предотвращения прорыва игрока через границы уровня.
MeshLibrary mesh_library 🔗
void set_mesh_library(value: MeshLibrary)
MeshLibrary get_mesh_library()
Присвоенный MeshLibrary.
PhysicsMaterial physics_material 🔗
void set_physics_material(value: PhysicsMaterial)
PhysicsMaterial get_physics_material()
Переопределяет физические свойства трения и отскока по умолчанию для всего GridMap.
Описания метода
void clear() 🔗
Очистить все ячейки.
void clear_baked_meshes() 🔗
Очищает все запеченные сетки. См. make_baked_meshes().
RID get_bake_mesh_instance(idx: int) 🔗
Возвращает RID запеченной сетки с заданным idx.
Возвращает массив ссылок ArrayMesh и Transform3D всех запекаемых сеток, существующих в текущем GridMap. Чётные индексы содержат ArrayMesh, а нечётные — Transform3D, которые всегда равны Transform3D.IDENTITY.
Этот метод использует выходные данные метода make_baked_meshes(), который будет вызван с gen_lightmap_uv равным true и lightmap_uv_texel_size равным 0.1, если он ещё не был вызван.
Basis get_basis_with_orthogonal_index(index: int) const 🔗
Возвращает один из 24 возможных поворотов, которые лежат вдоль векторов (x,y,z), где каждый компонент равен -1, 0 или 1. Для получения дополнительных сведений обратитесь к исходному коду Godot.
int get_cell_item(position: Vector3i) const 🔗
Индекс элемента MeshLibrary, расположенный в заданных координатах сетки. Если ячейка пуста, будет возвращена INVALID_CELL_ITEM.
Basis get_cell_item_basis(position: Vector3i) const 🔗
Возвращает базис, задающий ориентацию указанной ячейке.
int get_cell_item_orientation(position: Vector3i) const 🔗
Ориентация ячейки в заданных координатах сетки. -1 возвращается, если ячейка пуста.
bool get_collision_layer_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_layer, учитывая layer_number от 1 до 32.
bool get_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_mask, учитывая layer_number от 1 до 32.
Возвращает массив ссылок Transform3D и Mesh, соответствующих непустым ячейкам сетки. Преобразования задаются в локальном пространстве. Чётные индексы содержат Transform3D, а нечётные — Mesh, относящиеся к Transform3D в индексе, предшествующем ему.
Возвращает RID навигационной карты, которую этот узел GridMap использует для своих ячеек запеченных навигационных сеток.
Эта функция всегда возвращает набор карт на узле GridMap, а не карту на NavigationServer. Если карта изменяется напрямую с помощью API NavigationServer, узел GridMap не будет знать об изменении карты.
int get_orthogonal_index_from_basis(basis: Basis) const 🔗
Эта функция рассматривает дискретизацию вращений в 24 точки на единичной сфере, лежащих вдоль векторов (x,y,z), где каждый компонент равен -1, 0 или 1, и возвращает индекс (в диапазоне от 0 до 23) точки, наилучшим образом представляющей ориентацию объекта. Для получения дополнительных сведений обратитесь к исходному коду Godot.
Array[Vector3i] get_used_cells() const 🔗
Возвращает массив Vector3 с непустыми координатами ячеек на карте сетки.
Array[Vector3i] get_used_cells_by_item(item: int) const 🔗
Возвращает массив всех ячеек с заданным индексом элемента, указанным в item.
Vector3i local_to_map(local_position: Vector3) const 🔗
Возвращает координаты карты ячейки, содержащей заданный local_position. Если local_position находится в глобальных координатах, рассмотрите возможность использования Node3D.to_local() перед передачей его этому методу. См. также map_to_local().
void make_baked_meshes(gen_lightmap_uv: bool = false, lightmap_uv_texel_size: float = 0.1) 🔗
Генерирует запечённую сетку, представляющую все сетки в назначенной MeshLibrary для использования с LightmapGI. Если gen_lightmap_uv имеет значение true, данные UV2 будут сгенерированы для каждой сетки, используемой в данный момент в GridMap. В противном случае запечённые карты освещения будут доступны только для сеток, у которых уже есть данные UV2. При генерации UV2 параметр lightmap_uv_texel_size управляет плотностью текселей для карт освещения, чем ниже значение, тем более детальные карты освещения получаются. lightmap_uv_texel_size игнорируется, если gen_lightmap_uv имеет значение false. См. также get_bake_meshes(), который использует выходные данные этого метода.
Примечание: Вызов этого метода не приводит к запеканию карт освещения, поскольку запекание выполняется с помощью узла LightmapGI.
Vector3 map_to_local(map_position: Vector3i) const 🔗
Возвращает позицию ячейки сетки в локальном координатном пространстве GridMap. Чтобы преобразовать возвращаемое значение в глобальные координаты, используйте Node3D.to_global(). См. также local_to_map().
void resource_changed(resource: Resource) 🔗
Устарело: Use Resource.changed instead.
Этот метод ничего не даёт.
void set_cell_item(position: Vector3i, item: int, orientation: int = 0) 🔗
Устанавливает индекс сетки для ячейки, на которую ссылаются ее координаты сетки.
Отрицательный индекс элемента, такой как INVALID_CELL_ITEM, очистит ячейку.
При желании можно передать ориентацию элемента. Для допустимых значений ориентации см. get_orthogonal_index_from_basis().
void set_collision_layer_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_layer, учитывая layer_number от 1 до 32.
void set_collision_mask_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_mask при заданном layer_number от 1 до 32.
Устанавливает RID навигационной карты, которую этот узел GridMap должен использовать для своих запеченных ячеек навигационных сеток.