、1が実行されたバイトコードに見なければなりません。つまり、Telerikの逆コンパイラでUnityEngine.dll
を開いて、そのクラスで何が起こっているのかを確認するだけです。私の場合、ファイルはC:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
にありました。
は、ここでは、
UnityEngine.Vector3
クラスの(部分的な)内容を見ることができます。
はあなたを約Vector3.magnitude
、Vector3.sqrMagnitude
とVector3.normalized
を知りたいと思いました。 .magnitude
のためのコードは次のとおりです。
public float magnitude
{
get
{
return Mathf.Sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
}
}
これは、ベクトルの大きさをcomputates読み取り専用プロパティのstraighforward実装です。ご覧のように、キャッシュは行われません。 sqrMagnitude
を見てみましょう。
public float sqrMagnitude
{
get
{
return this.x * this.x + this.y * this.y + this.z * this.z;
}
}
いいえ、ここではキャッシングは必要ありません。しかし、.normalized
が面白いです。私たちをリードし
public Vector3 normalized
{
get
{
return Vector3.Normalize(this);
}
}
:
public static Vector3 Normalize(Vector3 value)
{
float single = Vector3.Magnitude(value);
if (single <= 1E-05f)
{
return Vector3.zero;
}
return value/single;
}
静的メソッドVector3.magnitude
は、メンバー関数の実装としてではなく、ofcourseの明示的なVector3
入力パラメータと同じです。
逆コンパイルされたバイトコードからわかるように、.sqrtMagnitude
,.magnitude
または.normalized
を計算するとキャッシングは行われません。したがって、これらの値を1回だけ計算し、可能であれば再利用してパフォーマンスを向上させることが賢明です。
ユニティサポートにお問い合わせください – Bijan