The surface normal is a vector, which can be imagined as a description of an arrow in 3D space.
In the example given by @jody7777, the arrow is a representation of the vector that is perpendicular to (i.e. normal to; i.e. at a 90 degree angle to) the surface at that point.
A Vector3
is named as such because it is a vector with 3 components, normally (x, y, z). Now let’s say that the length of the arrow in the above image is 5 units. It is shown to be pointing straight up, in the positive-y direction (if it was pointing straight down, it would be pointing in the negative-y direction).
We can describe this arrow with the vector (0, 5, 0) - it has no unit in the x or z directions, as it is not pointing forwards, backwards, or side-to-side- it is only pointing upwards. Again, if it was pointing straight down we could describe it as (0, -5, 0).
We can use this information to answer your second question:
Yes, there would! (3,4,3) can describe an arrow pointing 3 units in the x direction, 4 units in the y direction, and 3 units in the z direction. However (3, 7, 3) would describe an arrow pointing 3 units in the x direction, 7 units in the y direction, and 3 units in the z direction.
From this we can figure out that the second arrow would point to a location 3 units higher than the first one. We can also figure out that the length (i.e. magnitude) of the arrow (i.e. vector) is greater.
N.B.
It is also worth noting that the Surface Normal returned by the workspace:Raycast()
method always has a magnitude of 1, which in our analogy means that no matter which direction the arrow is pointing in it will always be exactly one unit long. A vector that has a magnitude of 1 unit is helpfully referred to as a unit vector!