Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Vector3i

使用整数坐标的 3D 向量。

描述

包含三个元素的结构体,可用于代表 3D 坐标或任何整数的三元组。

使用整数坐标,因此需要绝对精确时应比 Vector3 优先使用。请注意,取值范围有 32 位的限制,与 Vector3 不同,这个类型的精度无法使用引擎的构建参数进行配置。如果需要 64 位的值,请使用 intPackedInt64Array

注意:在布尔语境中,如果 Vector3i 等于 Vector3i(0, 0, 0) 则求值结果为 false。否则 Vector3i 的求值结果始终为 true

教程

属性

int

x

0

int

y

0

int

z

0

构造函数

Vector3i

Vector3i()

Vector3i

Vector3i(from: Vector3i)

Vector3i

Vector3i(from: Vector3)

Vector3i

Vector3i(x: int, y: int, z: int)

方法

Vector3i

abs() const

Vector3i

clamp(min: Vector3i, max: Vector3i) const

Vector3i

clampi(min: int, max: int) const

int

distance_squared_to(to: Vector3i) const

float

distance_to(to: Vector3i) const

float

length() const

int

length_squared() const

Vector3i

max(with: Vector3i) const

int

max_axis_index() const

Vector3i

maxi(with: int) const

Vector3i

min(with: Vector3i) const

int

min_axis_index() const

Vector3i

mini(with: int) const

Vector3i

sign() const

Vector3i

snapped(step: Vector3i) const

Vector3i

snappedi(step: int) const

运算符

bool

operator !=(right: Vector3i)

Vector3i

operator %(right: Vector3i)

Vector3i

operator %(right: int)

Vector3i

operator *(right: Vector3i)

Vector3

operator *(right: float)

Vector3i

operator *(right: int)

Vector3i

operator +(right: Vector3i)

Vector3i

operator -(right: Vector3i)

Vector3i

operator /(right: Vector3i)

Vector3

operator /(right: float)

Vector3i

operator /(right: int)

bool

operator <(right: Vector3i)

bool

operator <=(right: Vector3i)

bool

operator ==(right: Vector3i)

bool

operator >(right: Vector3i)

bool

operator >=(right: Vector3i)

int

operator [](index: int)

Vector3i

operator unary+()

Vector3i

operator unary-()


枚举

enum Axis: 🔗

Axis AXIS_X = 0

X 轴的枚举值。由 max_axis_index()min_axis_index() 返回。

Axis AXIS_Y = 1

Y 轴的枚举值。由 max_axis_index()min_axis_index() 返回。

Axis AXIS_Z = 2

Z 轴的枚举值。由 max_axis_index()min_axis_index() 返回。


常量

ZERO = Vector3i(0, 0, 0) 🔗

零向量,所有分量都设置为 0 的向量。

ONE = Vector3i(1, 1, 1) 🔗

一向量,所有分量都设置为 1 的向量。

MIN = Vector3i(-2147483648, -2147483648, -2147483648) 🔗

最小向量,所有分量等于 INT32_MIN 的向量。可用作 Vector3.INF 的负整数等价物。

MAX = Vector3i(2147483647, 2147483647, 2147483647) 🔗

最大向量,所有分量等于 INT32_MAX 的向量。可用作 Vector3.INF 的整数等价物。

LEFT = Vector3i(-1, 0, 0) 🔗

左单位向量。代表局部的左方向,全局的西方向。

RIGHT = Vector3i(1, 0, 0) 🔗

右单位向量。代表局部的右方向,全局的东方向。

UP = Vector3i(0, 1, 0) 🔗

上单位向量。

DOWN = Vector3i(0, -1, 0) 🔗

下单位向量。

FORWARD = Vector3i(0, 0, -1) 🔗

前单位向量。代表局部的前方向,全局的北方向。

BACK = Vector3i(0, 0, 1) 🔗

向后的单位向量。代表局部的后方,全局的南方。


属性说明

int x = 0 🔗

向量的 X 分量。也可以通过使用索引位置 [0] 访问。


int y = 0 🔗

向量的 Y 分量。也可以通过使用索引位置 [1] 访问。


int z = 0 🔗

向量的 Z 分量。也可以通过使用索引位置 [2] 访问。


构造函数说明

Vector3i Vector3i() 🔗

构造默认初始化的 Vector3i,所有分量都为 0


Vector3i Vector3i(from: Vector3i)

构造给定 Vector3i 的副本。


Vector3i Vector3i(from: Vector3)

根据给定的 Vector3 构造 Vector3i,会将各个分量的小数部分截断(向 0 取整)。要使用不同的行为,请考虑改为传入 Vector3.ceil()Vector3.floor()Vector3.round() 的结果。


Vector3i Vector3i(x: int, y: int, z: int)

返回具有给定分量的 Vector3i


方法说明

Vector3i abs() const 🔗

返回一个新向量,其所有分量都是绝对值,即正值。


Vector3i clamp(min: Vector3i, max: Vector3i) const 🔗

返回一个新向量,每个分量都使用 @GlobalScope.clamp() 限制在 minmax 之间。


Vector3i clampi(min: int, max: int) const 🔗

返回一个新向量,每个分量都使用 @GlobalScope.clamp() 限制在 minmax 之间。


int distance_squared_to(to: Vector3i) const 🔗

返回该向量与 to 之间的距离的平方。

该方法比 distance_to() 运行得更快,因此请在需要比较向量或者用于某些公式的平方距离时,优先使用这个方法。


float distance_to(to: Vector3i) const 🔗

返回该向量与 to 之间的距离。


float length() const 🔗

返回这个向量的长度,即大小。


int length_squared() const 🔗

返回这个向量的平方长度,即平方大小。

这个方法比 length() 运行得更快,所以如果你需要比较向量或需要一些公式的平方距离时,更喜欢用它。


Vector3i max(with: Vector3i) const 🔗

返回自身与 with 各分量的最大值,等价于 Vector3i(maxi(x, with.x), maxi(y, with.y), maxi(z, with.z))


int max_axis_index() const 🔗

返回该向量中最大值的轴。见 AXIS_* 常量。如果所有分量相等,则该方法返回 AXIS_X


Vector3i maxi(with: int) const 🔗

返回自身与 with 各分量的最大值,等价于 Vector3i(maxi(x, with), maxi(y, with), maxi(z, with))


Vector3i min(with: Vector3i) const 🔗

返回自身与 with 各分量的最小值,等价于 Vector3i(mini(x, with.x), mini(y, with.y), mini(z, with.z))


int min_axis_index() const 🔗

返回该向量中最小值的轴。见 AXIS_* 常量。如果所有分量相等,则该方法返回 AXIS_Z


Vector3i mini(with: int) const 🔗

返回自身与 with 各分量的最小值,等价于 Vector3i(mini(x, with), mini(y, with), mini(z, with))


Vector3i sign() const 🔗

返回一个新的向量,如果是正数,每个分量被设置为1 ,如果是负数,-1 ,如果是零,0 。其结果与对每个分量调用@GlobalScope.sign()相同。


Vector3i snapped(step: Vector3i) const 🔗

返回新的向量,每个分量都吸附到了与 step 中对应分量最接近的倍数。


Vector3i snappedi(step: int) const 🔗

返回一个新向量,其中每个分量都吸附到了 step 的最接近倍数。


运算符说明

bool operator !=(right: Vector3i) 🔗

如果向量不相等,则返回 true


Vector3i operator %(right: Vector3i) 🔗

获取该 Vector3i 的每个分量与给定 Vector3i 中分量的余数。这个运算使用的是截断式除法,因为对负数不友好,所以通常不会想要使用。如果你想要处理负数,请考虑改用 @GlobalScope.posmod()

print(Vector3i(10, -20, 30) % Vector3i(7, 8, 9)) # 输出 (3, -4, 3)

Vector3i operator %(right: int) 🔗

获取该 Vector3i 的每个分量与给定的 int 的余数。这个运算使用的是截断式除法,因为对负数不友好,所以通常不会想要使用。如果你想要处理负数,请考虑改用 @GlobalScope.posmod()

print(Vector3i(10, -20, 30) % 7) # 输出 (3, -6, 2)

Vector3i operator *(right: Vector3i) 🔗

将该 Vector3i 的每个分量乘以给定 Vector3i 的对应分量。

print(Vector3i(10, 20, 30) * Vector3i(3, 4, 5)) # 输出 (30, 80, 150)

Vector3 operator *(right: float) 🔗

将该 Vector3i 的每个分量乘以给定的 float。返回的是 Vector3

print(Vector3i(10, 15, 20) * 0.9) # 输出 (9.0, 13.5, 18.0)

Vector3i operator *(right: int) 🔗

将该 Vector3i 的每个分量乘以给定的 int


Vector3i operator +(right: Vector3i) 🔗

将该 Vector3i 的每个分量加上给定 Vector3i 的对应分量。

print(Vector3i(10, 20, 30) + Vector3i(3, 4, 5)) # 输出 (13, 24, 35)

Vector3i operator -(right: Vector3i) 🔗

将该 Vector3i 的每个分量减去给定 Vector3i 的对应分量。

print(Vector3i(10, 20, 30) - Vector3i(3, 4, 5)) # 输出 (7, 16, 25)

Vector3i operator /(right: Vector3i) 🔗

将该 Vector3i 的每个分量除以给定 Vector3i 的对应分量。

print(Vector3i(10, 20, 30) / Vector3i(2, 5, 3)) # 输出 (5, 4, 10)

Vector3 operator /(right: float) 🔗

将该 Vector3i 的每个分量除以给定的 float。返回的是 Vector3

print(Vector3i(10, 20, 30) / 2.9) # 输出 (5.0, 10.0, 15.0)

Vector3i operator /(right: int) 🔗

将该 Vector3i 的每个分量除以给定的 int


bool operator <(right: Vector3i) 🔗

比较两个 Vector3i 向量,首先检查左向量的 X 值是否小于 right 向量的 X 值。如果 X 值完全相等,则用相同的方法检查两个向量的 Y 值、Z 值。该运算符可用于向量排序。


bool operator <=(right: Vector3i) 🔗

比较两个 Vector3i 向量,首先检查左向量的 X 值是否小于等于 right 向量的 X 值。如果 X 值完全相等,则用相同的方法检查两个向量的 Y 值、Z 值。该运算符可用于向量排序。


bool operator ==(right: Vector3i) 🔗

如果向量相等,则返回 true


bool operator >(right: Vector3i) 🔗

比较两个 Vector3i 向量,首先检查左向量的 X 值是否大于 right 向量的 X 值。如果 X 值完全相等,则用相同的方法检查两个向量的 Y 值、Z 值。该运算符可用于向量排序。


bool operator >=(right: Vector3i) 🔗

比较两个 Vector3i 向量,首先检查左向量的 X 值是否大于等于 right 向量的 X 值。如果 X 值完全相等,则用相同的方法检查两个向量的 Y 值、Z 值。该运算符可用于向量排序。


int operator [](index: int) 🔗

使用向量分量的 index 来访问向量分量。v[0] 等价于 v.xv[1] 等价于 v.yv[2] 等价于 v.z


Vector3i operator unary+() 🔗

返回与 + 不存在时相同的值。单目 + 没有作用,但有时可以使你的代码更具可读性。


Vector3i operator unary-() 🔗

返回该 Vector3i 的负值。和写 Vector3i(-v.x, -v.y, -v.z) 是一样的。该操作在保持相同幅度的同时,翻转向量的方向。