GridMap

Inherits: Spatial < Node < Object

基于3D贴图格地图(3D tile-based maps)的节点。

描述

GridMap允许你以交互方式将meshes网格放置在网格上。它既可以在编辑器中进行,也可以从脚本中进行,这可以帮助你在游戏中创建关卡编辑器。

GridMaps使用MeshLibrary,其中包含了一个图块的列表。每一个图块都是一个带有材质的网格,加上可选的碰撞和导航形状。

GridMap包含一个单元格的集合。每个网格单元指的是MeshLibrary中的一个图块。地图中的所有单元都有相同的尺寸。

在内部,GridMap被分割成一个松散的八边形集合,以便有效地进行渲染和物理处理。每个八角形都有相同的尺寸,可以包含多个单元。

注意:GridMap 没有扩展 VisualInstance,因此无法根据 VisualInstance.layers 进行隐藏或剔除遮挡。如果你让灯光不影响第一层,整个 GridMap 就都不会被相关的灯光照亮。

教程

属性

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

MeshLibrary

mesh_library

bool

use_in_baked_light

false

方法

void

clear ( )

void

clear_baked_meshes ( )

RID

get_bake_mesh_instance ( int idx )

Array

get_bake_meshes ( )

int

get_cell_item ( int x, int y, int z ) const

int

get_cell_item_orientation ( int x, int y, int z ) const

bool

get_collision_layer_bit ( int bit ) const

bool

get_collision_mask_bit ( int bit ) const

Array

get_meshes ( )

Array

get_used_cells ( ) const

void

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

Vector3

map_to_world ( int x, int y, int z ) const

void

resource_changed ( Resource resource )

void

set_cell_item ( int x, int y, int z, int item, int orientation=0 )

void

set_clip ( bool enabled, bool clipabove=true, int floor=0, Vector3.Axis axis=0 )

void

set_collision_layer_bit ( int bit, bool value )

void

set_collision_mask_bit ( int bit, bool value )

Vector3

world_to_map ( Vector3 pos ) const

信号

  • cell_size_changed ( Vector3 cell_size )

cell_size 改变时触发。

常量

  • INVALID_CELL_ITEM = -1 —- 可以在 set_cell_item 中清除单元格(或在 get_cell_item 中重新代表一个空的单元格)的无效单元格。

属性说明

Default

true

Setter

set_center_x(value)

Getter

get_center_x()

如果true,则网格项以X轴为中心。


Default

true

Setter

set_center_y(value)

Getter

get_center_y()

如果为 true,则网格项以 Y 轴为中心。


Default

true

Setter

set_center_z(value)

Getter

get_center_z()

如果为 true,则网格项以 Z 轴为中心。


  • int cell_octant_size

Default

8

Setter

set_octant_size(value)

Getter

get_octant_size()

每个八分圆的大小以单元格的数量衡量。这适用于三个轴(XYZ)。


Default

1.0

Setter

set_cell_scale(value)

Getter

get_cell_scale()

单元格项目的比例。

这不会影响网格单元本身的大小,只会影响其中的项目。这可用于使单元格项目与其邻居重叠。


Default

Vector3( 2, 2, 2 )

Setter

set_cell_size(value)

Getter

get_cell_size()

网格单元的尺寸。

这并不影响网格的尺寸大小。参阅cell_scale


  • int collision_layer

Default

1

Setter

set_collision_layer(value)

Getter

get_collision_layer()

这个GridMap所处的物理层。

Gridmap作为静态体,意味着它们不会受到重力或是其他力的影响。它们只会受到其他与它们碰撞的物理体的影响。


  • int collision_mask

Default

1

Setter

set_collision_mask(value)

Getter

get_collision_mask()

The physics layers this GridMap detects collisions in. See Collision layers and masks in the documentation for more information.


Setter

set_mesh_library(value)

Getter

get_mesh_library()

指定的MeshLibrary


  • bool use_in_baked_light

Default

false

Setter

set_use_in_baked_light(value)

Getter

get_use_in_baked_light()

控制此 GridMap 是否会在 BakedLightmap 中烘焙。

方法说明

  • void clear ( )

清除所有单元格。


  • void clear_baked_meshes ( )

  • RID get_bake_mesh_instance ( int idx )

  • Array get_bake_meshes ( )

返回当前GridMap中存在的所有烘焙网格的ArrayMeshTransform引用的数组。


MeshLibrary 项目索引位于基于网格的 X、Y 和 Z 坐标处。如果单元格为空,则返回 INVALID_CELL_ITEM


  • int get_cell_item_orientation ( int x, int y, int z ) const

单元格在基于网格的 X、Y 和 Z 坐标处的方向。如果单元格为空,则返回 -1。


  • bool get_collision_layer_bit ( int bit ) const

返回collision_layer上的一个单独像素点。


  • bool get_collision_mask_bit ( int bit ) const

返回collision_mask上的一个独立像素。


返回对应于网格中非空单元格的 TransformMesh 引用数组。变换在世界空间中指定。


  • Array get_used_cells ( ) const

返回一个包含网格中非空单元格坐标的 Vector3 数组。


  • void make_baked_meshes ( bool gen_lightmap_uv=false, float lightmap_uv_texel_size=0.1 )

返回一个网格单元在GridMap本地坐标空间中的位置。


  • void resource_changed ( Resource resource )

设置由基于网格的 X、Y 和 Z 坐标引用的单元格的网格索引。

负的项目索引将清除单元格,例如 INVALID_CELL_ITEM

或者,可以传递项目的方向。相关有效的方向值,请参阅 Basis.get_orthogonal_index


  • void set_clip ( bool enabled, bool clipabove=true, int floor=0, Vector3.Axis axis=0 )

  • void set_collision_layer_bit ( int bit, bool value )

collision_layer上设置独立像素。


  • void set_collision_mask_bit ( int bit, bool value )

collision_mask上设置独立像素。


返回包含给定点的网格单元的坐标。

pos应该在GridMap的本地坐标空间中。