/// <summary>
/// Writes a unit vector (ie. a vector of length 1.0, for example a surface normal)
/// using specified number of bits
/// </summary>
public static void WriteUnitVector3(this NetBuffer message, Vector3 unitVector, int numberOfBits)
{
float x = unitVector.x;
float y = unitVector.y;
float z = unitVector.z;
double invPi = 1.0 / Math.PI;
float phi = (float)(Math.Atan2(x, y) * invPi);
float theta = (float)(Math.Atan2(z, Math.Sqrt(x * x + y * y)) * (invPi * 2));
int halfBits = numberOfBits / 2;
message.WriteSignedSingle(phi, halfBits);
message.WriteSignedSingle(theta, numberOfBits - halfBits);
}