GridMap
Entity 3D карт на основе плиток.
Entity 3D карт на основе плиток.
GridMap Он работает как от редактора, так и от скриптов, что может помочь создать редакторы в игровом уровне.
Сетка Maps использует MeshLibrary Каждая плитка представляет собой сетку с материалами, а также факультативную форму столкновения и навигационной формы.
A GridMap содержит набор клеток. Каждая ячейка сетки относится к плитке в MeshLibraryВсе клетки на карте имеют одинаковые размеры.
Внутри страны a GridMap Каждый октат имеет одинаковые размеры и может содержать несколько клеток.
Примечание: GridMap не длиннее VisualInstance3D и поэтому не могут быть скрыты или замаскированы на основании VisualInstance3D.Layers. Если свет не влияет на первый слой, все GridMap не будет освещен этим светом.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
GridMapКонструктор
public GridMap();Свойства15
BakeNavigationСвойство
public bool BakeNavigation { get; set; }Если true, этот GridMap создает навигационную область для каждой ячейки, которая использует элемент GridMap.MeshLibrary с навигационной сеткой. Созданная навигационная область будет использовать битовую маску навигационных слоев, назначенную элементу MeshLibrary.
CellCenterXСвойство
public bool CellCenterX { get; set; }Если true, элементы сетки центрируются по оси X.
CellCenterYСвойство
public bool CellCenterY { get; set; }Если true, элементы сетки центрируются по оси Y.
CellCenterZСвойство
public bool CellCenterZ { get; set; }Если true, элементы сетки центрируются по оси Z.
CellOctantSizeСвойство
public int CellOctantSize { get; set; }Размер каждого октанта измеряется в количестве ячеек. Это относится ко всем трем осям.
CellScaleСвойство
public float CellScale { get; set; }Масштаб базиса размещённых элементов: влияет и на меш, и на физические формы. Не меняет CellSize или MapToLocal. Значение 0.5 уменьшает блоки, но оставляет прежние промежутки между позициями клеток.
CellSizeСвойство
public Vector3 CellSize { get; set; }Шаг сетки по трём осям. Меняет расстояния и позиции клеток, но не размеры исходных мешей MeshLibrary. Согласуйте размеры модулей отдельно; для масштаба размещённых мешей и форм существует CellScale.
CollisionLayerСвойство
public uint CollisionLayer { get; set; }Физические слои, в которых находится этот GridMap. GridMaps действуют как статические тела, то есть на них не влияет гравитация или другие силы. Они влияют только на другие физические тела, которые сталкиваются с ними.
CollisionMaskСвойство
public uint CollisionMask { get; set; }Физические слои, в которых этот GridMap обнаруживает столкновения. Для получения дополнительной информации см. Слои и маски столкновений в документации.
CollisionPriorityСвойство
public float CollisionPriority { get; set; }Приоритет, используемый для решения столкновений при возникновении проникновения. Чем выше приоритет, тем ниже будет проникновение в объект. Это может быть использовано, например, для предотвращения прорыва игрока через границы уровня.
CollisionVisibilityModeСвойство
public GridMap.DebugVisibilityMode CollisionVisibilityMode { get; set; }Отображать или скрывать формы столкновений GridMap. Если установлено значение GridMap.DebugVisibilityMode.Default, это зависит от настроек отладки отображения столкновений.
DebugOctantColorСвойство
public Color DebugOctantColor { get; set; }:: Color используется для визуализации октантового отладочного устройства, когда GridMap.DebugShowOctants Включено.
DebugShowOctantsСвойство
public bool DebugShowOctants { get; set; }Если true, показывает отладочные изображения для октантов.
Меш
MeshLibraryСвойство
public MeshLibrary MeshLibrary { get; set; }Общий ресурс элементов сетки: ID, меши, трансформации и отдельные физические формы. Меш не создаёт коллизию автоматически. В текущей версии проверено сохранение с последовательными ID 0 и 1; разрыв 0/7 теряет данные элемента 7 после .rdata roundtrip, даже при Error.Ok.
PhysicsMaterialСвойство
public PhysicsMaterial PhysicsMaterial { get; set; }Переопределяет физические свойства трения и отскока по умолчанию для всего GridMap.
Методы60
Clearvoid
public void Clear();Очистить все ячейки.
ClearBakedMeshesvoid
public void ClearBakedMeshes();Очищает все запеченные сетки. См. GridMap.MakeBakedMeshes.
GetBakeMeshInstanceRid
public Rid GetBakeMeshInstance(int idx);Возвращает Rid запеченной сетки с заданным idx.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
RidGetBakeMeshesReckfell.Collections.Array
public Reckfell.Collections.Array GetBakeMeshes();Возвращает массив ссылок ArrayMesh и Transform3D всех запекаемых сеток, существующих в текущем GridMap. Чётные индексы содержат ArrayMesh, а нечётные — Transform3D, которые всегда равны Transform3D.Identity.
Этот метод использует выходные данные метода GridMap.MakeBakedMeshes, который будет вызван с gen_lightmap_uv равным true и lightmap_uv_texel_size равным 0.1, если он ещё не был вызван.
Reckfell.Collections.ArrayGetBasisWithOrthogonalIndexBasis
public Basis GetBasisWithOrthogonalIndex(int index);Возвращает один из 24 возможных поворотов, которые лежат вдоль векторов (x,y,z), где каждый компонент равен -1, 0 или 1. Для получения дополнительных сведений обратитесь к исходному коду Reckfell.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
BasisGetCellItemint
public int GetCellItem(Vector3I position);Читает сохранённый ID клетки. Наличие ID не доказывает наличие такого элемента в MeshLibrary, готовность коллизии или видимый меш.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector3I | — |
positionКоордината клетки сетки.
intID элемента либо -1 для пустой клетки. Внутреннее поле ID 16-битное; проверяйте диапазон до SetCellItem.
GetCellItemBasisBasis
public Basis GetCellItemBasis(Vector3I position);Возвращает базис, задающий ориентацию указанной ячейке.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector3I | — |
BasisGetCellItemOrientationint
public int GetCellItemOrientation(Vector3I position);Читает индекс ориентации клетки, а не Euler-углы. Для Basis используйте GetCellItemBasis или GetBasisWithOrthogonalIndex.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector3I | — |
intИндекс 0..23 для корректно записанной ортогональной ориентации; -1 для пустой клетки. Значения вне контракта SetCellItem не используйте.
GetCellScalefloat
public float GetCellScale();floatGetCellSizeVector3
public Vector3 GetCellSize();Vector3GetCenterXbool
public bool GetCenterX();boolGetCenterYbool
public bool GetCenterY();boolGetCenterZbool
public bool GetCenterZ();boolGetCollisionLayeruint
public uint GetCollisionLayer();uintGetCollisionLayerValuebool
public bool GetCollisionLayerValue(int layerNumber);Возвращает, включен ли указанный слой GridMap.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionMaskuint
public uint GetCollisionMask();uintGetCollisionMaskValuebool
public bool GetCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой GridMap.CollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionPriorityfloat
public float GetCollisionPriority();floatGetCollisionVisibilityModeGridMap.DebugVisibilityMode
public GridMap.DebugVisibilityMode GetCollisionVisibilityMode();GridMap.DebugVisibilityModeGetDebugOctantColorColor
public Color GetDebugOctantColor();ColorGetDebugShowOctantsbool
public bool GetDebugShowOctants();boolGetMeshLibraryMeshLibrary
public MeshLibrary GetMeshLibrary();MeshLibraryGetMeshesReckfell.Collections.Array
public Reckfell.Collections.Array GetMeshes();Возвращает пары трансформаций и мешей существующих элементов. Это не список Entity или коллайдеров; неизвестный ID клетки без элемента библиотеки может отсутствовать в результате.
Reckfell.Collections.ArrayArray с чередующимися Transform3D и Mesh. Число элементов массива вдвое больше числа пар; не считайте Count количеством клеток.
GetNavigationMapRid
public Rid GetNavigationMap();Возвращает Rid навигационной карты, которую этот узел GridMap использует для своих ячеек запеченных навигационных сеток.
Эта функция всегда возвращает набор карт на узле GridMap, а не карту на NavigationServer. Если карта изменяется напрямую с помощью API Навигационный Сервер, узел GridMap не будет знать об изменении карты.
RidGetOctantCoordsFromCellCoordsVector3I
public Vector3I GetOctantCoordsFromCellCoords(Vector3I cellCoords);Возвращает координаты октанта Vector3I, к которому принадлежит ячейка по адресу cell_coords.
| Имя | Тип | По умолчанию |
|---|---|---|
cellCoords | Vector3I | — |
Vector3IGetOctantSizeint
public int GetOctantSize();intGetOctantsInBoundsReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetOctantsInBounds(Aabb bounds);Возвращает массив координат октантов Vector3I, находящихся внутри заданных bounds, включая октанты, в которых нет используемых ячеек.
| Имя | Тип | По умолчанию |
|---|---|---|
bounds | Aabb | — |
Reckfell.Collections.Array<Vector3I>GetOrthogonalIndexFromBasisint
public int GetOrthogonalIndexFromBasis(Basis basis);Эта функция рассматривает дискретизацию вращений в 24 точки на единичной сфере, лежащих вдоль векторов (x,y,z), где каждый компонент равен -1, 0 или 1, и возвращает индекс (в диапазоне от 0 до 23) точки, наилучшим образом представляющей ориентацию объекта. Для получения дополнительных сведений обратитесь к исходному коду Reckfell.
| Имя | Тип | По умолчанию |
|---|---|---|
basis | Basis | — |
intGetPhysicsMaterialPhysicsMaterial
public PhysicsMaterial GetPhysicsMaterial();PhysicsMaterialGetUsedCellsReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedCells();Возвращает массив Vector3 с непустыми координатами ячеек на карте сетки.
Reckfell.Collections.Array<Vector3I>GetUsedCellsByItemReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedCellsByItem(int item);Возвращает массив всех ячеек с заданным индексом элемента, указанным в item.
| Имя | Тип | По умолчанию |
|---|---|---|
item | int | — |
Reckfell.Collections.Array<Vector3I>GetUsedCellsInOctantReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedCellsInOctant(Vector3I octantCoords);Возвращает массив объектов Vector3I с координатами непустых ячеек внутри октанта по адресу octant_coords.
| Имя | Тип | По умолчанию |
|---|---|---|
octantCoords | Vector3I | — |
Reckfell.Collections.Array<Vector3I>GetUsedCellsInOctantByItemReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedCellsInOctantByItem(Vector3I octantCoords, int item);Возвращает массив объектов Vector3I с координатами ячеек внутри октанта в точке octant_coords, которые используют указанную ячейку item.
| Имя | Тип | По умолчанию |
|---|---|---|
octantCoords | Vector3I | — |
item | int | — |
Reckfell.Collections.Array<Vector3I>GetUsedOctantsReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedOctants();Возвращает массив объектов Vector3I с координатами непустых октантов на карте сетки.
Reckfell.Collections.Array<Vector3I>GetUsedOctantsByItemReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedOctantsByItem(int item);Возвращает массив объектов Vector3I с координатами октантов, использующих указанный item на карте сетки.
| Имя | Тип | По умолчанию |
|---|---|---|
item | int | — |
Reckfell.Collections.Array<Vector3I>GetUsedOctantsInBoundsReckfell.Collections.Array<Vector3I>
public Reckfell.Collections.Array<Vector3I> GetUsedOctantsInBounds(Aabb bounds);Возвращает массив Vector3I с координатами октантов непустых октантов, находящихся внутри локальных bounds.
| Имя | Тип | По умолчанию |
|---|---|---|
bounds | Aabb | — |
Reckfell.Collections.Array<Vector3I>IsBakingNavigationbool
public bool IsBakingNavigation();boolLocalToMapVector3I
public Vector3I LocalToMap(Vector3 localPosition);Делит локальную позицию на CellSize и округляет вниз по каждой оси. Для мировой позиции сначала вызовите ToLocal; целочисленное приведение деления не подходит для отрицательных значений.
| Имя | Тип | По умолчанию |
|---|---|---|
localPosition | Vector3 | — |
localPositionПозиция в пространстве GridMap, не необработанная мировая точка попадания луча.
Vector3IКоордината клетки. При размере 2 точка (-0.01,-0.01,-0.01) принадлежит клетке (-1,-1,-1). Для точки точно на поверхности учитывайте сторону границы и normal попадания.
MakeBakedMeshesvoid
public void MakeBakedMeshes(bool genLightmapUV = false, float lightmapUVTexelSize = 0.1f);Генерирует запечённую сетку, представляющую все сетки в назначенной MeshLibrary для использования с LightmapGI. Если gen_lightmap_uv имеет значение true, данные UV2 будут сгенерированы для каждой сетки, используемой в данный момент в GridMap. В противном случае запечённые карты освещения будут доступны только для сеток, у которых уже есть данные UV2. При генерации UV2 параметр lightmap_uv_texel_size управляет плотностью текселей для карт освещения, чем ниже значение, тем более детальные карты освещения получаются. lightmap_uv_texel_size игнорируется, если gen_lightmap_uv имеет значение false. См. также GridMap.GetBakeMeshes, который использует выходные данные этого метода.
Примечание: Вызов этого метода не приводит к запеканию карт освещения, поскольку запекание выполняется с помощью узла LightmapGI.
| Имя | Тип | По умолчанию |
|---|---|---|
genLightmapUV | bool | false |
lightmapUVTexelSize | float | 0.1f |
MapToLocalVector3
public Vector3 MapToLocal(Vector3I mapPosition);Переводит координату клетки в локальную позицию с учётом CellSize и отдельных CellCenterX/Y/Z. Это не гарантированный центр меша: MeshLibrary содержит собственные трансформации.
| Имя | Тип | По умолчанию |
|---|---|---|
mapPosition | Vector3I | — |
mapPositionЦелочисленная координата клетки.
Vector3Локальная позиция клетки. При CellSize=(2,2,2), центрировании X/Z и выключенном центрировании Y клетка (2,3,-1) даёт (5,6,-1). Для мировой позиции вызовите ToGlobal.
ResourceChangedvoid · Устарело
public void ResourceChanged(Resource resource);Этот метод ничего не даёт.
| Имя | Тип | По умолчанию |
|---|---|---|
resource | Resource | — |
SetBakeNavigationvoid
public void SetBakeNavigation(bool bakeNavigation);| Имя | Тип | По умолчанию |
|---|---|---|
bakeNavigation | bool | — |
SetCellItemvoid
public void SetCellItem(Vector3I position, int item, int orientation = 0);Задаёт единственный элемент клетки; повторная запись заменяет прежний элемент. Логическое состояние меняется сразу, отрисовка и физические октанты обновляются отложенно. Проверьте ID по GetItemList: неизвестный ID может храниться без видимого меша. В проверенной версии поле ID 16-битное: 65536 превращается в 0.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector3I | — |
item | int | — |
orientation | int | 0 |
positionЦелочисленная координата клетки, не позиция в метрах. По исходникам абсолютная величина каждой координаты должна быть меньше 2^20.
itemID MeshLibrary в пределах 0..65535; отрицательное значение удаляет клетку. Для сохранения библиотеки в текущей версии используйте последовательные ID от 0 и проверяйте загрузку: разрывы ID могут потерять данные.
orientationИндекс одной из 24 ортогональных ориентаций, а не угол в градусах. Получите его через GetOrthogonalIndexFromBasis; не передавайте произвольное число.
SetCellScalevoid
public void SetCellScale(float scale);| Имя | Тип | По умолчанию |
|---|---|---|
scale | float | — |
SetCellSizevoid
public void SetCellSize(Vector3 size);| Имя | Тип | По умолчанию |
|---|---|---|
size | Vector3 | — |
SetCenterXvoid
public void SetCenterX(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetCenterYvoid
public void SetCenterY(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetCenterZvoid
public void SetCenterZ(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetCollisionLayervoid
public void SetCollisionLayer(uint layer);| Имя | Тип | По умолчанию |
|---|---|---|
layer | uint | — |
SetCollisionLayerValuevoid
public void SetCollisionLayerValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в GridMap.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionMaskvoid
public void SetCollisionMask(uint mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | uint | — |
SetCollisionMaskValuevoid
public void SetCollisionMaskValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в GridMap.CollisionMask при заданном layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionPriorityvoid
public void SetCollisionPriority(float priority);| Имя | Тип | По умолчанию |
|---|---|---|
priority | float | — |
SetCollisionVisibilityModevoid
public void SetCollisionVisibilityMode(GridMap.DebugVisibilityMode visibilityMode);| Имя | Тип | По умолчанию |
|---|---|---|
visibilityMode | GridMap.DebugVisibilityMode | — |
SetDebugOctantColorvoid
public void SetDebugOctantColor(Color color);| Имя | Тип | По умолчанию |
|---|---|---|
color | Color | — |
SetDebugShowOctantsvoid
public void SetDebugShowOctants(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetMeshLibraryvoid
public void SetMeshLibrary(MeshLibrary meshLibrary);| Имя | Тип | По умолчанию |
|---|---|---|
meshLibrary | MeshLibrary | — |
SetNavigationMapvoid
public void SetNavigationMap(Rid navigationMap);Устанавливает Rid навигационной карты, которую этот узел GridMap должен использовать для своих запеченных ячеек навигационных сеток.
| Имя | Тип | По умолчанию |
|---|---|---|
navigationMap | Rid | — |
SetOctantSizevoid
public void SetOctantSize(int size);| Имя | Тип | По умолчанию |
|---|---|---|
size | int | — |
SetPhysicsMaterialvoid
public void SetPhysicsMaterial(PhysicsMaterial material);| Имя | Тип | По умолчанию |
|---|---|---|
material | PhysicsMaterial | — |
Сигналы и события2
CellSizeChangedСобытие
public event GridMap.CellSizeChangedEventHandler CellSizeChanged;Вызывается при изменении GridMap.CellSize.
| Имя | Тип | По умолчанию |
|---|---|---|
cellSize | Vector3 | — |
ChangedСобытие
public event Action Changed;Вызывается при изменении MeshLibrary данной GridMap.
Поля и константы1
InvalidCellItemПоле
public const long InvalidCellItem = -1;Недопустимый элемент ячейки, который можно использовать в GridMap.SetCellItem для очистки ячеек (или представлять пустую ячейку в GridMap.GetCellItem).
GridMap.DebugVisibilityMode
| Значение | Описание |
|---|---|
Default = 0 | Скройте отладочные фигуры столкновений в редакторе и используйте настройки отладки, чтобы определить их видимость в игре (например, |
ForceHide = 2 | Всегда скрывать отладочные фигуры, отображающие столкновения. |
ForceShow = 1 | Всегда отображать отладочные фигуры столкновений. |