【Unity】transformとGetComponent()の違い
Unityのtransform
プロパティとGetComponent<Transform>()
メソッド、それぞれの違いについてみていきましょう
transformプロパティ
transform
プロパティも実際にはComponent
クラスのインスタンスであり、GameObjectのTransformコンポーネントを参照します。transform
はComponent
クラスを継承したTransformコンポーネントの特別な参照であり、すべてのGameObjectに必ず含まれる基本的なコンポーネントです。
transform
プロパティは、MonoBehaviour(の基本クラスであるComponent)を継承したクラスから直接アクセスできる特別なプロパティで、そのGameObjectにアタッチされているTransformコンポーネントへのショートカットです。
GetComponent<Transform>()
メソッド
これに対してGetComponent<Transform>()
メソッドは、GameObjectが持つ任意のコンポーネントを取得するための汎用的な方法であり、Transform
型を指定することでTransformコンポーネントを取得しますが、transform
プロパティのように直接的で効率的なアクセス方法ではありません。
まとめ
したがって、transform
とGetComponent<Transform>()
の両方がTransformコンポーネントへのアクセスを提供しますが、transform
はより直接的で高速なアクセスを提供するため、Transformコンポーネントにアクセスする標準的な方法とされています。
サンプル
void Update()
{
transform.Translate(new Vector2(1, 0) * Time.deltaTime);
}
プロパティの情報を見る
Componentクラス抜粋
public class Component : Object
{
//
// 概要:
// The Transform attached to this GameObject.
// このGameObjectにアタッチされているTransform
public extern Transform transform
{
[MethodImpl(MethodImplOptions.InternalCall)]
[FreeFunction("GetTransform", HasExplicitThis = true, ThrowsException = true)]
get;
}
どちらが高速か?
transform
プロパティの方がGetComponent<Transform>()
メソッドよりも高速です。
Unity内部でtransform
プロパティはGameObjectのTransformコンポーネントへの直接的な参照としてキャッシュされています。これは、GameObjectが作成されるときに自動的に設定され、そのGameObjectのライフタイム中に常に利用可能です。したがって、transform
プロパティを使用すると、追加の検索処理やキャスト処理なしに即座にTransformコンポーネントにアクセスできるため、非常に高速です。
一方で、GetComponent<Transform>()
メソッドは実行時にコンポーネントの検索を行います。このメソッドは、指定された型のコンポーネントがGameObjectにアタッチされているかを検査し、見つかった場合はその参照を返します。この検索プロセスにはわずかながら時間がかかるため、transform
プロパティを使用する場合に比べてパフォーマンスコストが高くなります。
特に、ゲームのフレームごとの更新など、頻繁にアクセスが必要な場合は、このパフォーマンス差が顕著になることがあります。そのため、Transformコンポーネントへのアクセスが必要な場合は、可能な限りtransform
プロパティを使用することが推奨されます。
ディスカッション
コメント一覧
まだ、コメントがありません