検証したバージョン
Unity 2022.3.12f1
検証コード
GameObject
using UnityEngine;
public class GameObjectTest : MonoBehaviour
{
private GameObject _gameObject;
private void Start()
{
_gameObject = this.gameObject;
}
private void Update()
{
Test1();
Test2();
}
private void Test1()
{
for (int i = 0; i < 10000; i++)
{
var obj = this.gameObject;
}
}
private void Test2()
{
for (int i = 0; i < 10000; i++)
{
var obj = _gameObject;
}
}
}
Transform
using UnityEngine;
public class TransformTest : MonoBehaviour
{
private Transform _transform;
private void Start()
{
_transform = this.transform;
}
private void Update()
{
Test1();
Test2();
}
private void Test1()
{
for (int i = 0; i < 10000; i++)
{
var transform = this.transform;
}
}
private void Test2()
{
for (int i = 0; i < 10000; i++)
{
var transform = _transform;
}
}
}
検証結果
GameObject
Transform
どちらも Component.get_xx
という Unity内部の処理がアクセスごとに呼び出されており、キャッシュする方が速いことがわかります。
まとめ
gameObject や transform に頻繁にアクセスする場合はキャッシュしたほうがいい
実際には Update で 10000回もアクセスすることはないとおもいますが、Linq や自作の Manager クラス等からアクセスすることが多々あると思うので、キャッシュしてプロパティとして公開するのがいいと思います。