Vector3
Трёхкомпонентный float-вектор. Используется везде где встречаются позиции, размеры, скорости и world-space направления (entity.Position, :GetBonePosition, game.CameraPosition, BasePart.Size и т.д.).
| Статически е функции | 12 (1 конструктор + 11 утилит) |
| Статические константы | 5 (zero, one, xAxis, yAxis, zAxis) |
| Поля instance | X, Y, Z, Magnitude, Unit |
| Методы instance | 11 (тот же набор что и static utilities, оба call-стиля поддерживаются) |
| Операторы | +, -, *scalar, /scalar, унарный - |
Алиасы. Большинство методов имеют две формы (PascalCase + lowercase):
Vector3.Dot/Vector3.dot. Толькоnewsingle-form. См. Обзор / Конвенция именования.
==это identity-only.Vector3.new(1,2,3) == Vector3.new(1,2,3)возвращаетfalse. Метатаблица не реализует value-equality. Используй:FuzzyEq(other)для сравнения по значению. Pre-allocated singletons (Vector3.zero,.one,.xAxis,.yAxis,.zAxis) identity-equal к самим себе:Vector3.zero == Vector3.zeroэтоtrue, ноVector3.zero == Vector3.new(0, 0, 0)этоfalse, потому чтоnew()всегда возвращает свежий userdata.
Краткий справочник
Static Vector3.*
| Имя | Сигнатура | Заметка | Статус |
|---|---|---|---|
new | (x?, y?, z?) → Vector3 | конструктор от 0 до 3 чисел, missing args = 0 | проверено |
zero | Vector3 константа (0, 0, 0) | identity для сложения | проверено |
one | Vector3 константа (1, 1, 1) | проверено | |
xAxis | Vector3 константа (1, 0, 0) | проверено | |
yAxis | Vector3 константа (0, 1, 0) | проверено | |
zAxis | Vector3 константа (0, 0, 1) | проверено | |
Dot | (a, b) → number | скалярное произведение | проверено |
Cross | (a, b) → Vector3 | правое векторное произведение | проверено |
Lerp | (a, b, t) → Vector3 | покомпонентная линейная интерполяция | проверено |
Floor | (v) → Vector3 | покомпонентный math.floor | проверено |
Ceil | (v) → Vector3 | покомпонентный math.ceil | проверено |
Abs | (v) → Vector3 | покомпонентный math.abs | проверено |
Sign | (v) → Vector3 | покомпонентный sign (-1, 0, +1) | проверено |
Min | (a, b) → Vector3 | покомпонентный минимум | проверено |
Max | (a, b) → Vector3 | покомпонентный максимум | проверено |
Angle | (a, b) → number | беззнаковый угол между векторами (радианы) | проверено |
FuzzyEq | (a, b [, eps]) → bool | epsilon-tolerant value-equality | проверено |
Instance v.* и v:*
| Член | Тип | Заметка |
|---|---|---|
v.X, v.Y, v.Z | number | три компоненты |
v.Magnitude | number | sqrt(X*X + Y*Y + Z*Z), пересчитывается при каждом доступе |
v.Unit | Vector3 | тот же вектор делённый на Magnitude (zero вектор даёт NaN-эквивалент, не обращайся к Unit на zero-векторе) |
v:Dot(other), :Cross, :Lerp, :Floor, :Ceil, :Abs, :Sign, :Min, :Max, :Angle, :FuzzyEq | разные | method-call форма, эквивалентна static с v как первый аргумен т |
new
Vector3.new(x?: number, y?: number, z?: number) → Vector3
Создаёт вектор. Missing args = 0. Проверенные return shapes:
| Вызов | Результат |
|---|---|
Vector3.new() | (0, 0, 0) |
Vector3.new(1) | (1, 0, 0) |
Vector3.new(1, 2) | (1, 2, 0) |
Vector3.new(1, 2, 3) | (1, 2, 3) |
Vector3.new(1, 2, 3, 4) | (1, 2, 3) (extra args молча игнорируются) |
Vector3.new(nil) | (0, 0, 0) (nil = 0) |
Vector3.new("s") | error: "bad argument #1 to '?' (number expected, got string)" |
local up = Vector3.new(0, 1, 0)
local point = Vector3.new(120.5, 30, -88.2)
print(point.X, point.Y, point.Z, point.Magnitude)
Константы
Vector3.zero → (0, 0, 0)
Vector3.one → (1, 1, 1)
Vector3.xAxis → (1, 0, 0)
Vector3.yAxis → (0, 1, 0)
Vector3.zAxis → (0, 0, 1)
Это pre-allocated immutable userdata. Используй их вместо создания свежего Vector3.new(0, 0, 0) в hot path.
local pos = entity.GetLocalPlayer().Position
if pos == Vector3.zero then
end
== это identity-onlyМетатаблица не реализует value-equality. Vector3.new(1, 2, 3) == Vector3.new(1, 2, 3) возвращает false. Используй :FuzzyEq для сравнения по значению.