#this.transformがGetComponentを行なっており重いと聞いたので、実際に計測してみた
テストした際のスクリプト
// キャッシュしたtransformを取得するプロパティ
protected Transform mTrans;
public Transform cachedTransform { get { if (mTrans == null) mTrans = transform; return mTrans; } }
public Transform cachedTransform2 { get { return mTrans; } }
// 01 普通にtransformを取得
for (int i = 0; i < number_of_tests; i++)
{
Transform test = this.transform;
//yield return 0;
}
// 02 キャッシュしておくプロパティから取得
for (int i = 0; i < number_of_tests; i++)
{
Transform test = this.cachedTransform;
//yield return 0;
}
// 03 ローカル変数にキャッシュしてそれを参照する
Transform cache = this.transform;
for (int i = 0; i < number_of_tests; i++)
{
Transform test = cache;
//yield return 0;
}
// 04 cachedTransformプロパティ内の処理を抜き出した版(プロパティのオーバーヘッドをみてみた)
mTrans = null;
for (int i = 0; i < number_of_tests; i++)
{
if (mTrans == null)
mTrans = transform;
Transform test = mTrans;
//yield return 0;
}
// 05 cachedTransformのifで存在チェックをしない版(プロパティ内の処理負荷の違いをみてみた)
mTrans = this.transform;
for (int i = 0; i < number_of_tests; i++)
{
Transform test = cachedTransform2;
//yield return 0;
}
##計測結果
number_of_tests = 100
00: 0.01573563(ms)
01: 0.08511543(ms)
02: 0.005483627(ms)
03: 0.010252(ms)
04: 0.03743172(ms)
number_of_tests = 1000
00: 0.1368523(ms)
01: 0.223875(ms)
02: 0.1990795(ms)
03: 0.1330376(ms)
04: 0.1192093(ms)
number_of_tests = 100(yield return あり)
00: 0.1575947(ms)
01: 0.3004074(ms)
02: 0.01096725(ms)
03: 0.09155273(ms)
04: 0.1583099(ms)
number_of_tests = 1000(yield return あり)
00: 1.351833(ms)
01: 0.9250641(ms)
02: 0.05340576(ms)
03: 0.6370544(ms)
04: 0.4959106(ms)
##計測してみて
・メモリキャッシュにのっている状態であれば、this.transform
でもそこそこ早いがローカル変数にキャッシュした方が無難
・ローカル変数でも、キャッシュから外れると重い
・プロパティでもオーバーヘッドが重いようなので、変数にキャッシュしておいた方が軽い
・cachedTransform
とローカル変数にキャッシュしたものを使うのを場合によって併用するのが作りやすそうか