跳转至

GFGridKey3D

API Reference / Standard / 类索引

  • 路径:addons/gf/standard/foundation/math/gf_grid_key_3d.gd
  • 模块:Standard
  • 继承:RefCounted
  • API:public
  • 类别:运行时服务 (runtime_service)
  • 首次版本:3.18.0

3D 网格坐标稳定整数键工具。 将有限范围内的 Vector3i 格坐标与方向编号打包成非负 int,并提供反解与 Vector3 位置量化。它只处理坐标编码,不绑定 TileMap、GridMap、渲染或存档格式。

成员概览

类型 名称 签名
常量 COORDINATE_BITS const COORDINATE_BITS: int = 19
常量 ORIENTATION_BITS const ORIENTATION_BITS: int = 6
常量 COORDINATE_MIN const COORDINATE_MIN: int = -262144
常量 COORDINATE_MAX const COORDINATE_MAX: int = 262143
常量 ORIENTATION_MIN const ORIENTATION_MIN: int = 0
常量 ORIENTATION_MAX const ORIENTATION_MAX: int = 63
常量 INVALID_KEY const INVALID_KEY: int = -1
方法 can_pack_cell static func can_pack_cell(cell: Vector3i, orientation: int = 0) -> bool:
方法 pack_cell static func pack_cell(cell: Vector3i, orientation: int = 0) -> int:
方法 is_packed_key_valid static func is_packed_key_valid(key: int) -> bool:
方法 unpack_cell static func unpack_cell(key: int) -> Vector3i:
方法 unpack_orientation static func unpack_orientation(key: int) -> int:
方法 unpack_key static func unpack_key(key: int) -> Dictionary:
方法 position_to_cell static func position_to_cell( position: Vector3, cell_size: Vector3 = Vector3.ONE, origin: Vector3 = Vector3.ZERO ) -> Vector3i:
方法 pack_position static func pack_position( position: Vector3, cell_size: Vector3 = Vector3.ONE, origin: Vector3 = Vector3.ZERO, orientation: int = 0 ) -> int:

常量

COORDINATE_BITS

  • API:public
const COORDINATE_BITS: int = 19

每个坐标轴使用的位数。

ORIENTATION_BITS

  • API:public
const ORIENTATION_BITS: int = 6

方向编号使用的位数。

COORDINATE_MIN

  • API:public
const COORDINATE_MIN: int = -262144

可打包坐标最小值。

COORDINATE_MAX

  • API:public
const COORDINATE_MAX: int = 262143

可打包坐标最大值。

ORIENTATION_MIN

  • API:public
const ORIENTATION_MIN: int = 0

可打包方向编号最小值。

ORIENTATION_MAX

  • API:public
const ORIENTATION_MAX: int = 63

可打包方向编号最大值。

INVALID_KEY

  • API:public
const INVALID_KEY: int = -1

无效 key 哨兵值。

方法

can_pack_cell

  • API:public
static func can_pack_cell(cell: Vector3i, orientation: int = 0) -> bool:

判断格坐标和方向编号是否能被打包。

参数:

名称 说明
cell 3D 格坐标。
orientation 方向编号,范围为 0..63。

返回:可打包时返回 true。

pack_cell

  • API:public
static func pack_cell(cell: Vector3i, orientation: int = 0) -> int:

将格坐标和方向编号打包成非负整数 key。

参数:

名称 说明
cell 3D 格坐标。
orientation 方向编号,范围为 0..63。

返回:打包后的 key;输入超出范围时返回 INVALID_KEY。

is_packed_key_valid

  • API:public
static func is_packed_key_valid(key: int) -> bool:

判断整数是否可能是 GFGridKey3D 生成的 key。

参数:

名称 说明
key 待检测 key。

返回:在有效整数范围内时返回 true。

unpack_cell

  • API:public
static func unpack_cell(key: int) -> Vector3i:

从 key 反解格坐标。

参数:

名称 说明
key 打包 key。

返回:反解出的格坐标;key 无效时返回 Vector3i.ZERO。

unpack_orientation

  • API:public
static func unpack_orientation(key: int) -> int:

从 key 反解方向编号。

参数:

名称 说明
key 打包 key。

返回:方向编号;key 无效时返回 -1。

unpack_key

  • API:public
static func unpack_key(key: int) -> Dictionary:

从 key 反解完整数据字典。

参数:

名称 说明
key 打包 key。

返回:Dictionary,包含 valid、cell 和 orientation。

结构:

  • return: Dictionary with valid: bool, cell: Vector3i, and orientation: int.

position_to_cell

  • API:public
static func position_to_cell( position: Vector3, cell_size: Vector3 = Vector3.ONE, origin: Vector3 = Vector3.ZERO ) -> Vector3i:

将世界位置量化为格坐标。

参数:

名称 说明
position 世界或局部位置。
cell_size 单格尺寸,各轴会被限制为正数。
origin 量化原点。

返回:量化后的格坐标。

pack_position

  • API:public
static func pack_position( position: Vector3, cell_size: Vector3 = Vector3.ONE, origin: Vector3 = Vector3.ZERO, orientation: int = 0 ) -> int:

将世界位置量化并打包成整数 key。

参数:

名称 说明
position 世界或局部位置。
cell_size 单格尺寸,各轴会被限制为正数。
origin 量化原点。
orientation 方向编号,范围为 0..63。

返回:打包后的 key;量化坐标或方向编号超出范围时返回 INVALID_KEY。