Roblox UtilitiesDevlHub Roblox Documentation

Data type

Vector2

Represents a 2D value with direction and magnitude.

The Vector2 data type represents a 2D value with direction and magnitude. Some applications include GUI elements and 2D mouse positions.

Math Operations#

The following math operations are valid for the Vector2 data type:

Operation Description
Datatype.Vector2 + Datatype.Vector2 Produces a Datatype.Vector2 with each component of the second added to the corresponding component of the first.
Datatype.Vector2 - Datatype.Vector2 Produces a Datatype.Vector2 with each component of the second subtracted from the corresponding component of the first.
Datatype.Vector2 * Datatype.Vector2 Produces a Datatype.Vector2 with each component of the second multiplied by the corresponding component of the first.
Datatype.Vector2 / Datatype.Vector2 Produces a Datatype.Vector2 with each component of the first divided by the corresponding component of the second.
Datatype.Vector2 * number Produces a Datatype.Vector2 with each component multiplied by the number.
Datatype.Vector2 / number Produces a Datatype.Vector2 with each component divided by the number.

Constructors 1#

newReturns a Vector2 from the given x and y components.

new(x: number, y: number)#

Returns a Vector2 from the given x and y components. Both parameters default to 0 if not provided.

Luau
local a = Vector2.new(3, 4)
print(a.X, a.Y)  --> 3  4

-- Omitted arguments default to 0
local b = Vector2.new()
print(b.X, b.Y)  --> 0  0
NameTypeDefaultDescription
xnumberThe x-coordinate of the new vector (defaults to 0).
ynumberThe y-coordinate of the new vector (defaults to 0).

Constants 4#

zeroA Vector2 with a magnitude of zero.
oneA Vector2 with a value of 1 on every axis.
xAxisA Vector2 with a value of 1 on the X axis.
yAxisA Vector2 with a value of 1 on the Y axis.

zero: Vector2#

A Vector2 with a magnitude of zero.

This API member is a constant, and must be accessed through the Vector2 global as opposed to an individual Vector2 object.

Luau
print(Vector2.zero)  --> 0, 0

one: Vector2#

A Vector2 with a value of 1 on every axis.

This API member is a constant, and must be accessed through the Vector2 global as opposed to an individual Vector2 object.

Luau
print(Vector2.one)  --> 1, 1

xAxis: Vector2#

A Vector2 with a value of 1 on the X axis.

This API member is a constant, and must be accessed through the Vector2 global as opposed to an individual Vector2 object.

Luau
print(Vector2.xAxis)  --> 1, 0

yAxis: Vector2#

A Vector2 with a value of 1 on the Y axis.

This API member is a constant, and must be accessed through the Vector2 global as opposed to an individual Vector2 object.

Luau
print(Vector2.yAxis)  --> 0, 1

Properties 4#

XnumberThe x-coordinate of the Vector2.
YnumberThe y-coordinate of the Vector2.
MagnitudenumberThe length of the Vector2.
UnitVector2A normalized copy of the Vector2.

X: number#

The x-coordinate of the Vector2, corresponding to the first argument passed to Vector2.new(). This property is read-only.

Luau
local v = Vector2.new(3, 4)
print(v.X)  --> 3

Y: number#

The y-coordinate of the Vector2, corresponding to the second argument passed to Vector2.new(). This property is read-only.

Luau
local v = Vector2.new(3, 4)
print(v.Y)  --> 4

Magnitude: number#

The length (magnitude) of the Vector2, computed as math.sqrt(X^2 + Y^2). This property is read-only.

Luau
local v = Vector2.new(3, 4)
print(v.Magnitude)  --> 5

Unit: Vector2#

A normalized copy of the Vector2 — one that has the same direction as the original but a magnitude of 1. If the vector has zero magnitude the result is undefined (contains nan values). This property is read-only.

Luau
local v = Vector2.new(3, 4)
print(v.Unit)             --> 0.6, 0.8
print(v.Unit.Magnitude)   --> 1

Methods 11#

CrossReturns the cross product of the two vectors.
AbsReturns a new vector from the absolute values of the original's components.
CeilReturns a new vector from the ceiling of the original's components.
FloorReturns a new vector from the floor of the original's components.
SignReturns a new vector from the sign (-1, 0, or 1) of the original's components.
AngleReturns the angle in radians between the two vectors.
DotReturns a scalar dot product of the two vectors.
LerpReturns a Vector2 linearly interpolated between this Vector2 and the given goal by the given alpha.
MaxReturns a Vector2 with each component as the highest among the respective components of the provided Vector2 objects.
MinReturns a Vector2 with each component as the lowest among the respective components of the provided Vector2 objects.
FuzzyEqReturns true if the X and Y components of the other Vector2 are within epsilon units of each corresponding component of this Vector2.

Cross(other: Vector2): number#

Returns the 2D cross product of this vector with other, computed as self.X * other.Y - self.Y * other.X. Unlike Vector3:Cross() which returns a vector, the 2D cross product returns a scalar representing the signed magnitude of the perpendicular (Z) component. The result is positive when other is counter-clockwise from self, negative when clockwise, and zero when the vectors are parallel.

Luau
local a = Vector2.new(1, 0)
local b = Vector2.new(0, 1)
print(a:Cross(b))  -->  1
print(b:Cross(a))  --> -1
NameTypeDefaultDescription
otherVector2The vector to compute the cross product against.
Returns
  • number — The signed scalar magnitude of the perpendicular component, computed as self.X * other.Y - self.Y * other.X.

Abs(): Vector2#

Returns a new vector from the absolute values of the original's components. For example, a vector of (-2, 4) returns a vector of (2, 4).

Returns
  • Vector2 — A new vector whose components are the absolute values of the original's components.

Ceil(): Vector2#

Returns a new vector from the ceiling of the original's components. For example, a vector of (-2.6, 5.1) returns a vector of (-2, 6).

Returns
  • Vector2 — A new vector whose components are the ceiling (rounded up) of the original's components.

Floor(): Vector2#

Returns a new vector from the floor of the original's components. For example, a vector of (-2.6, 5.1) returns a vector of (-3, 5).

Returns
  • Vector2 — A new vector whose components are the floor (rounded down) of the original's components.

Sign(): Vector2#

Returns a new vector from the sign (-1, 0, or 1) of the original's components. For example, a vector of (-2.6, 5.1) returns a vector of (-1, 1).

Returns
  • Vector2 — A new vector whose components are the sign (-1, 0, or 1) of the original's components.

Angle(other: Vector2, isSigned: boolean = false): number#

Returns the angle in radians between the two vectors. Specify true for the optional isSigned boolean if you want a signed angle. By default, the method returns the absolute value. Signed angles are a negative when going clockwise. Values are in the range [0, pi] for absolute angles and [-pi, pi] for signed angles.

NameTypeDefaultDescription
otherVector2The vector to measure the angle to.
isSignedbooleanfalseWhether to return a signed angle (negative when clockwise) instead of the absolute value.
Returns
  • number

Dot(v: Vector2): number#

Returns the scalar dot product of this vector and v, computed as self.X * v.X + self.Y * v.Y. The result equals the product of the two magnitudes multiplied by the cosine of the angle between them. A positive value means the vectors point in roughly the same direction; zero means they are perpendicular; negative means they point in roughly opposite directions.

Luau
local a = Vector2.new(1, 0)
local b = Vector2.new(0, 1)
print(a:Dot(b))  --> 0  (perpendicular)
print(a:Dot(a))  --> 1  (parallel, equal to Magnitude^2)
NameTypeDefaultDescription
vVector2The vector to compute the dot product with.
Returns
  • number

Lerp(v: Vector2, alpha: number): Vector2#

Returns a Vector2 linearly interpolated between this Vector2 and the given goal v by the fraction alpha, using the formula self + (v - self) * alpha. An alpha of 0 returns self, an alpha of 1 returns v, and values between 0 and 1 return a point in between. Note that alpha is not clamped to [0, 1] — values outside that range extrapolate beyond the two endpoints.

Luau
local a = Vector2.new(0, 0)
local b = Vector2.new(4, 8)
print(a:Lerp(b, 0.5))  --> 2, 4
NameTypeDefaultDescription
vVector2The goal vector to interpolate toward.
alphanumberThe interpolation fraction, where 0 returns this vector and 1 returns v.
Returns

Max(others...: Tuple): Vector2#

Returns a Vector2 with each component as the highest among the respective components of the provided Vector2 objects.

Luau
local a = Vector2.new(1, 2)
local b = Vector2.new(2, 1)

print(a:Max(b)) -- Vector2.new(2, 2)
NameTypeDefaultDescription
others...TupleOne or more Vector2 objects to compare against.
Returns

Min(others...: Tuple): Vector2#

Returns a Vector2 with each component as the lowest among the respective components of the provided Vector2 objects.

Luau
local a = Vector2.new(1, 2)
local b = Vector2.new(2, 1)

print(a:Min(b)) -- Vector2.new(1, 1)
NameTypeDefaultDescription
others...TupleOne or more Vector2 objects to compare against.
Returns

FuzzyEq(other: Vector2, epsilon: number = 0.00001 (1e-5)): bool#

Returns true if the X and Y components of the other Vector2 are within epsilon units of each corresponding component of this Vector2. The comparison is per-component: both math.abs(self.X - other.X) and math.abs(self.Y - other.Y) must be less than or equal to epsilon. The optional epsilon parameter defaults to 1e-5 (0.00001) and must be a positive value no greater than 0.1.

Luau
local a = Vector2.new(1, 2)
local b = Vector2.new(1.000009, 2.000009)
print(a:FuzzyEq(b))           --> true  (within default 1e-5)
print(a:FuzzyEq(b, 0.000001)) --> false (tighter epsilon)
NameTypeDefaultDescription
otherVector2The vector to compare against.
epsilonnumber0.00001 (1e-5)The maximum difference allowed for each component to still be considered equal.
Returns
  • bool

Math operations 6#

OperationDescription
Vector2 + Vector2 → Vector2Produces a Vector2 with each component of the second added to the corresponding component of the first.
Vector2 - Vector2 → Vector2Produces a Vector2 with each component of the second subtracted from the corresponding component of the first.
Vector2 * Vector2 → Vector2Produces a Vector2 with each component of the second multiplied by the corresponding component of the first.
Vector2 / Vector2 → Vector2Produces a Vector2 with each component of the first divided by the corresponding component of the second.
Vector2 * number → Vector2Produces a Vector2 with each component multiplied by the number.
Vector2 / number → Vector2Produces a Vector2 with each component divided by the number.