GridMap

Наследует: Node3D < Node < Object

Узел для 3D-карт на основе плиток.

Описание

GridMap позволяет интерактивно размещать меши на сетке. Он работает как в редакторе, так и через скрипты, что помогает создавать внутриигровые редакторы уровней.

GridMap использует MeshLibrary, содержащую список тайлов. Каждый тайл — это меш с материалами плюс опциональные формы столкновений и навигации.

GridMap содержит коллекцию ячеек. Каждая ячейка сетки ссылается на тайл в MeshLibrary. Все ячейки карты имеют одинаковые размеры.

Внутренне GridMap разделён на разреженную коллекцию октантов для эффективного рендеринга и обработки физики. Каждый октант имеет одинаковые размеры и может содержать несколько ячеек.

Примечание: GridMap не наследует от VisualInstance3D, поэтому не может быть скрыт или маскирован через VisualInstance3D.layers. Если свет не влияет на первый слой, весь GridMap не будет освещён этим источником света.

Обучающие материалы

Свойства

bool

bake_navigation

false

bool

cell_center_x

true

bool

cell_center_y

true

bool

cell_center_z

true

int

cell_octant_size

8

float

cell_scale

1.0

Vector3

cell_size

Vector3(2, 2, 2)

int

collision_layer

1

int

collision_mask

1

float

collision_priority

1.0

MeshLibrary

mesh_library

PhysicsMaterial

physics_material

Методы

void

clear()

void

clear_baked_meshes()

RID

get_bake_mesh_instance(idx: int)

Array

get_bake_meshes()

Basis

get_basis_with_orthogonal_index(index: int) const

int

get_cell_item(position: Vector3i) const

Basis

get_cell_item_basis(position: Vector3i) const

int

get_cell_item_orientation(position: Vector3i) const

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

Array

get_meshes() const

RID

get_navigation_map() const

int

get_orthogonal_index_from_basis(basis: Basis) const

Array[Vector3i]

get_used_cells() const

Array[Vector3i]

get_used_cells_by_item(item: int) const

Vector3i

local_to_map(local_position: Vector3) const

void

make_baked_meshes(gen_lightmap_uv: bool = false, lightmap_uv_texel_size: float = 0.1)

Vector3

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()).


Описания свойств

bool bake_navigation = false 🔗

  • void set_bake_navigation(value: bool)

  • bool is_baking_navigation()

Если true, этот GridMap создает навигационную область для каждой ячейки, которая использует элемент mesh_library с навигационной сеткой. Созданная навигационная область будет использовать битовую маску навигационных слоев, назначенную элементу MeshLibrary.


bool cell_center_x = true 🔗

  • void set_center_x(value: bool)

  • bool get_center_x()

Если true, элементы сетки центрируются по оси X.


bool cell_center_y = true 🔗

  • void set_center_y(value: bool)

  • bool get_center_y()

Если true, элементы сетки центрируются по оси Y.


bool cell_center_z = true 🔗

  • void set_center_z(value: bool)

  • bool get_center_z()

Если true, элементы сетки центрируются по оси Z.


int cell_octant_size = 8 🔗

  • void set_octant_size(value: int)

  • int get_octant_size()

Размер каждого октанта измеряется в количестве ячеек. Это относится ко всем трем осям.


float cell_scale = 1.0 🔗

  • void set_cell_scale(value: float)

  • float get_cell_scale()

Масштаб элементов ячеек.

Это не влияет на размер самих ячеек сетки, а только на элементы в них. Это можно использовать, чтобы элементы ячеек перекрывали своих соседей.


Vector3 cell_size = Vector3(2, 2, 2) 🔗

Размеры ячеек сетки.

Это не влияет на размер ячеек. См. cell_scale.


int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Физические слои, в которых находится этот GridMap.

GridMaps действуют как статические тела, то есть на них не влияет гравитация или другие силы. Они влияют только на другие физические тела, которые сталкиваются с ними.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Физические слои, в которых этот GridMap обнаруживает столкновения. Для получения дополнительной информации см. Слои и маски столкновений в документации.


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

Приоритет, используемый для решения столкновений при возникновении проникновения. Чем выше приоритет, тем ниже будет проникновение в объект. Это может быть использовано, например, для предотвращения прорыва игрока через границы уровня.


MeshLibrary mesh_library 🔗

Присвоенный MeshLibrary.


PhysicsMaterial physics_material 🔗

Переопределяет физические свойства трения и отскока по умолчанию для всего GridMap.


Описания метода

void clear() 🔗

Очистить все ячейки.


void clear_baked_meshes() 🔗

Очищает все запеченные сетки. См. make_baked_meshes().


RID get_bake_mesh_instance(idx: int) 🔗

Возвращает RID запеченной сетки с заданным idx.


Array get_bake_meshes() 🔗

Возвращает массив ссылок 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.


Array get_meshes() const 🔗

Возвращает массив ссылок Transform3D и Mesh, соответствующих непустым ячейкам сетки. Преобразования задаются в локальном пространстве. Чётные индексы содержат Transform3D, а нечётные — Mesh, относящиеся к Transform3D в индексе, предшествующем ему.


RID get_navigation_map() const 🔗

Возвращает 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.


void set_navigation_map(navigation_map: RID) 🔗

Устанавливает RID навигационной карты, которую этот узел GridMap должен использовать для своих запеченных ячеек навигационных сеток.