====== Vector3 ====== **You can see the latest list of available methods in types.lua. **\\ Vector3 is a class with three values: X, Y and Z.\\ It is used to describe a position or direction of a force.\\ ===== List of methods ===== **For the latest list of the methods, refer to "types.lua" file in "EmbeddedScriptWorkspace" folder. **\\ **To shorten the description, ''Vector3 type'' is abbreviated as ''Vec'' and ''number type'' is abbreviated as ''num''. **\\ **Arguments are shown in ''()'' and return values are shown after semicolons '':''. ** | Method name | Description | | Slerp (a: Vec3, b: Vec3, t: num): Vec3 | Spherically interpolates between two vectors by the coefficient t. The range of t is [0, 1]. | | SlerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3 | Same as Slerp, but doesn't restrict the t range to [0, 1]. Used for things like springs. | | OrthoNormalize (normal: usertype, tangent: usertype) | | | RotateTowards (current, target, maxRadiansDelta, maxMagnitudeDelta): Vec3 | | | Lerp (a: Vec3, b: Vec3, t: num): Vec3 | Linearly interpolates between two vectors by the coefficient t. The range of t is [0, 1]. | | LerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3 | Same as Lerp, but doesn't restrict the t range to [0, 1]. Used for things like springs. | | MoveTowards (current: Vec3, target: Vec3, maxDistanceDelta: num): Vec3 | | | SmoothDamp (current: Vec3, target: Vec3, currentVelocity: usertype, smoothTime: num, maxSpeed: num): Vec3 | Change the vector gradually toward the target as the time proceeds. | | set_Item (index: num, value: num) | | | Set (newX: num, newY: num, newZ: num) | | | Scale (a: Vec3, b: Vec3): Vec3 | Multiply each element of two vectors. | | Cross (lhs: Vec3, rhs: Vec3): Vec3 | Calculate the cross product of two vectors. | | GetHashCode(): num | Not to be used. | | Reflect (inDirection: Vec3, inNormal: Vec3): Vec3 | | | Normalize (value: Vec3): Vec3 | Normalize a vector to a unit vector. | | Dot (lhs: Vec3, rhs: Vec3): num | Calculate the inner product of two vectors. | | Project (vector: Vec3, onNormal: Vec3): Vec3 | Calculate the vector of the projection of the first argument, using onNormal as the base. | | ProjectOnPlane (vector: Vec3, planeNormal: Vec3): Vec3 | | | Angle (from: Vec3, to: Vec3): num | Return the angle of the vector between two points (Return the result of Dot() as Euler angle)| | SignedAngle (from: Vec3, to: Vec3, axis: Vec3): num | | | Distance (a: Vec3, b: Vec3): num | Calculate the distance between two points: a and b. * Same as (a-b).magnitude | | ClampMagnitude (vector: Vec3, maxLength: num): Vec3 | | | Magnitude (vector: Vec3): num | Calculate the length of the vector. | | SqrMagnitude (vector: Vec3): num | Calculate the squared length of the vector. | | Min (lhs: Vec3, rhs: Vec3): Vec3 | Compare each element of two vectors and create a vector with the smallest values. | | Max (lhs: Vec3, rhs: Vec3): Vec3 | Compare each element of two vectors and create a vector with the largest values. | | ToString (): string | | | AngleBetween (from: Vec3, to: Vec3): num | | | Exclude (excludeThis: Vec3, fromThat: Vec3): Vec3 | | | normalized: Vec3 | Normalize the vector (Read-only) | | magnitude: num | Read the vector as length. | | sqrMagnitude: num | Read the vector as squared length. | ==== Methods for initialization ==== | Method name | Description | | _new (x: num, y: num, z: num): Vec3 | | | zero: Vec3 | (0.0, 0.0, 0.0) | | one: Vec3 | (1.0, 1.0, 1.0) | | forward: Vec3 | (0.0, 0.0, 1.0) positive Z-axis | | back: Vec3 | (0.0, 0.0, -1.0) negative Z-axis | | up: Vec3 | (0.0, 1.0, 0.0) positive Y-axis | | down: Vec3 | (0.0, -1.0, 0.0) negative Y-axis | | left: Vec3 | (0.0, 0.0, 0.0) negative X-axis | | right: Vec3 | (0.0, 0.0, 0.0) positive X-axis | | positiveInfinity: Vec3 | (Infinity, Infinity, Infinity) | | negativeInfinity: Vec3 | (-Infinity, -Infinity, -Infinity) | | fwd: Vec3 | (0.0, 0.0, 1.0) positive Z-axis (same as forward) | | kEpsilon: num | | | kEpsilonNormalSqrt: num | | | x: num | Access only the "x" in a "Vec3" | | y: num | Access only the "y" in a "Vec3" | | z: num | Access only the "z" in a "Vec3" | ===== About initialization ===== Example\\ local pos = Vector3.__new(1,1,1) local zero = Vector3.zero local one = Vector3.one print(pos) print(zero) print(one) The result\\ (1.0, 1.0, 1.0) (0.0, 0.0, 0.0) (1.0, 1.0, 1.0) In VCI, to initialize a Vector3, use "new" as shown above.\\ You can also specify the value by using "zero" and "one" after "Vector3".\\ The types of value will be number, which is handled as floating-point numbers internally. ===== List of initialization types ===== Example\\ local zero = Vector3.zero print(zero) local one = Vector3.one print(one) local forward = Vector3.forward print(forward) local back = Vector3.back print(back) local up = Vector3.up print(up) local down = Vector3.down print(down) local left = Vector3.left print(left) local right = Vector3.right print(right) The result\\ (0.0, 0.0, 0.0) (1.0, 1.0, 1.0) (0.0, 0.0, 1.0) (0.0, 0.0, -1.0) (0.0, 1.0, 0.0) (0.0, -1.0, 0.0) (-1.0, 0.0, 0.0) (1.0, 0.0, 0.0) The X-axis corresponds to left-right direction, Y-axis corresponds to up-down direction and Z-axis corresponds to a forward-backward direction. For example, by using SetVelocity() ([[en:vci:script:reference:exporttransform|ExportTransform]]) to add Vector3.forward on a SubItem, you can move the SubItem to the direction of Z-axis. ===== Access each x y z element ===== Example\\ local pos = Vector3.__new(1,1,1) pos.x = pos.x + 1 pos.x = pos.y + 2 pos.x = pos.z + 3 print(pos.x) print(pos.y) print(pos.z) The result\\ 2 3 4 To access each element of Vector3 individually, specify the element you want to access after a variable.\\ Use the format **VariableName.ElementToAccess**. ===== fwd, negativeInfinity, positiveInfinity ===== Example\\ local fwd = Vector3.fwd print(fwd) local negativeInfinity = Vector3.negativeInfinity print(negativeInfinity) local positiveInfinity = Vector3.positiveInfinity print(positiveInfinity) The result\\ (0.0, 0.0, 1.0) (-Infinity, -Infinity, -Infinity) (Infinity, Infinity, Infinity) Vector3.fwd is the same as Vector3.forward.\\ ===== normalized ===== Example\\ local vec3 = Vector3.__new(0.5,1,2) print(vec3) print(vec3.normalized) The result\\ (0.5, 1.0, 2.0) (0.2, 0.4, 0.9) Normalize a vector.\\ When comparing two vectors, it is difficult to handle them in their original values, therefore, perform normalization to align to the standard unit vector.\\ When you want to handle a vector as a direction, you need to align the vector to the length of 1, so that it can be handled as an element with just the direction.