以前どこかで「Vector3のDistanceは平方根演算を行うため計算コストが高いので、距離の比較だけならsqrMagnitudeを用いる方が良い」というのを見かけ、気になっていたので実際にパフォーマンスを比較してみた。
結果は、パフォーマンスに違いは見られず。
むしろsqr〜じゃない方のmagnitudeが若干遅い。
値の条件が悪いのか、何通りか変えてやってみたが、ほぼ同じ結果となった。
にしても「MacBookPro 2011 earlier」で1億回実行して約3秒なので、そこまで重くなさそう。
単純な繰り返し計算なので、どこかで意図せずコンパイル時の最適化みたいなのがかかってしまったのか。
何か間違ってるようで心配なので、気付いたことがあれば@mokusanまでお願いします。
const int REPEAT_NUM = 100000000; // 1億回 Vector3 p1 = new Vector3(1, 5, 10); Vector3 p2 = new Vector3(100, 50, 70); DateTime startTime; startTime = DateTime.Now; for (int i = 0; i < REPEAT_NUM; i++) { float distance = Vector3.Distance(p1, p2); } Debug.Log(DateTime.Now - startTime); startTime = DateTime.Now; for (int i = 0; i < REPEAT_NUM; i++) { float distance = (p2 - p1).magnitude; } Debug.Log(DateTime.Now - startTime); startTime = DateTime.Now; for (int i = 0; i < REPEAT_NUM; i++) { float distance = (p2 - p1).sqrMagnitude; } Debug.Log(DateTime.Now - startTime);
00:00:03.2123430 <- Distance() 00:00:04.0998070 <- magnitude 00:00:03.1908280 <- sqrMagnitude