①Vector3有提供函数Distance,传入两个点的坐标即可得到距离。
public float Distance(Vector3 pos1, Vector3 pos2){
return Vector3.Distance(pos1, pos2);
}
Vector3.Distance源码:
public static float Distance(Vector3 a, Vector3 b){
float num1 = a.x - b.x;
float num2 = a.y - b.y;
float num3 = a.z - b.z;
return (float) Math.Sqrt((double) num1 * (double) num1 + (double) num2 * (double) num2 + (double) num3 * (double) num3);
}
②Vector3有提供函数Magnitude,传入向量(两个点相减可以得到向量)即可得到距离。
public float Distance(Vector3 pos1, Vector3 pos2){
return Vector3.Magnitude(pos1 - pos2);
}
Vector3.Magnitude源码:
public static float Magnitude(Vector3 vector) => (float) Math.Sqrt(
(double) vector.x * (double) vector.x + (double) vector.y * (double) vector.y
+ (double) vector.z * (double) vector.z);
我遇到的问题就是需要根据物体离摄像机距离排序,我一开始用的Vector3.Distance,然后我的导师就和我说这个可以优化,因为我并不是要知道真正的距离,只是需要比较大小,而上面两个函数都进行了一次开方,对于我的问题是多余的运算。
Vector3提供了一个SqrMagnitude,源码:
public static float SqrMagnitude(Vector3 vector) => (float)
((double) vector.x * (double) vector.x + (double) vector.y * (double) vector.y +
(double) vector.z * (double) vector.z);
这个就是Vector3.Magnitude少了开方的操作,省掉一步,优化成功咯。