Decentraland uses vectors to represent paths, points in space, and directions. Vectors can also be used to define rotation orientations, as a friendlier alternative to quaternions.
Vector4 are each defined as different classes, containing a different number of dimensions.
Vector objects contain a series of handy methods that you can call to avoid having to deal with most vector math operations.
Below are a few lines showing the syntax for some basic operations with vectors.
// Instance a vector object let myVector = new Vector3(3, 1, 5) // Edit one of its values myVector.x = 5 // Call functions from the vector instance let normalizedVector = myVector.normalize() // Call functions from the vector class let distance = Vector3.Distance(myVector1, myVector2) let midPoint = Vector3.lerp(myVector1, myVector2, 0.5)
3D vectors are also included in the fields of several components. For example, the
Transform component contains
Vector3 values for the position and scale of the entity.
Shortcuts for writing direction vectors #
The following shortcuts exist for defining generic vectors:
Vector3.Zero()returns (0, 0, 0)
Vector3.Up()returns (0, 1, 0)
Vector3.Down()returns (0, -1, 0)
Vector3.Left()returns (-1, 0, 0)
Vector3.Right()returns (1, 0, 0)
Vector3.Forward()returns (0, 0, 1)
Vector3.Backward()returns (0, 0, -1)
A scalar is nothing more than a number. For that reason, it doesn’t make much sense to instantiate a
Scalar object to store data. The functions in the
Scalar class however exposes several handy functions (similar to those in Vector classes), that can be used on numbers.
// Call functions from the Scalar class let random = Scalar.RandomRange(1, 100) let midPoint = Scalar.lerp(number1, number2, 0.5) let clampedValue = Scalar.Clamp(myInput, 0, 100)
Quaternions are used to store rotation information for the Transform component. A Quaternion is composed of four numbers between -1 and 1: x, y, z, w.
// Instance a quaternion object let myQuaternion = new Quaternion(0, 0, 0, 1) // Edit one of its values myQuaternion.x = 1 // Call functions from the quaternion instance let quaternionAsArray = myQuaternion.asArray() // Call functions from the quaternion class let quaternionFromEuler = Quaternion.FromEulerAnglesRef(90, 0, 0) let midPoint = Quaternion.Slerp(myQuaternion1, myQuaternion2, 0.5)