# Help with understanding Vector3 math

I was making a 3rd person player controller in Unity.

Would

Vector3 inputDirection = orientation.forward * verticalInput + orientation.right * horizontalInput;


be the same as

Vector3 inputDirection = new Vector3(horizontalInput, 0.0f, verticalInput)


?

I'm pretty new to Vectors, and would like help understanding how or how they aren't the same.

This expression:

inputDirection = orientation.forward * verticalInput + orientation.right * horizontalInput


can only equivalent to this:

inputDirection = new Vector3(horizontalInput, 0.0f, verticalInput)


if orientation.forward is Vector3(0.0f, 0.0f, 1.0f) and orientation.right is Vector3(1.0f, 0.0f, 0.0f).

Which I cannot guarantee to be true. Why? Because orientation is a variable, and thus it might… well… vary. Using orientation allows you to have the input be… well… oriented differently. For example, to make it relative to move a character in a direction relative to where the camera is pointing or to move a vehicule according to its current orientation, and so on.

Ok, so you say you want to understand vectors. You need to start with these operations:

• Vector-Scalar product

Vector-Scalar product

So, when you have a Vector-Scalar product such as this:

v * f


Is equivalent to this:

Vector3(v.x * f, v.y * f, v.z * f)


Thus, this:

orientation.forward * verticalInput


Is equivalent to this:

Vector3(
orientation.forward.x * verticalInput,
orientation.forward.y * verticalInput,
orientation.forward.z * verticalInput
)


And this:

orientation.right * horizontalInput


Is equivalent to this:

Vector3(
orientation.right.x * horizontalInput,
orientation.right.y * horizontalInput,
orientation.right.z * horizontalInput
)


If you add two vectors like this:

a + b


It is equivalent to this:

Vector3(a.x + b.x, a.y + b.y, a.z + b.z)


So when you have this:

Vector3(
orientation.forward.x * verticalInput,
orientation.forward.y * verticalInput,
orientation.forward.z * verticalInput
) + Vector3(
orientation.right.x * horizontalInput,
orientation.right.y * horizontalInput,
orientation.right.z * horizontalInput
)


It is equivalent to this:

Vector3(
orientation.forward.x * verticalInput + orientation.right.x * horizontalInput,
orientation.forward.y * verticalInput + orientation.right.y * horizontalInput,
orientation.forward.z * verticalInput + orientation.right.z * horizontalInput
)


Wrapping up

So how can

Vector3(
orientation.forward.x * verticalInput + orientation.right.x * horizontalInput,
orientation.forward.y * verticalInput + orientation.right.y * horizontalInput,
orientation.forward.z * verticalInput + orientation.right.z * horizontalInput
)


Be the same as this:

inputDirection = new Vector3(horizontalInput, 0.0f, verticalInput)


Well, it implies that:

horizontalInput == orientation.forward.x * verticalInput + orientation.right.x * horizontalInput

0.0f == orientation.forward.y * verticalInput + orientation.right.y * horizontalInput

verticalInput == orientation.forward.z * verticalInput + orientation.right.z * horizontalInput


And thus:

orientation.forward.x == 0.0f
orientation.right.x == 1.0f

orientation.forward.y == 0.0f
orientation.right.y == 0.0f

orientation.forward.z == 1.0f
orientation.right.z == 0.0f


Which is how I get this:

orientation.forward = Vector3(0.0f, 0.0f, 1.0f)

orientation.right = Vector3(1.0f, 0.0f, 0.0f)


Learning material

I'm going to send you to 3Blue1Brown video series on Linear Algebra.

I have written an Introduction to Vector Algebra and How to Work With Arbitrarily Oriented Vectors before, which you go over if you rather my writing.