UnityでGameObject(コンポーネントのインスタンス)を取得する場合の「SerializeFieldにしてInspectorでセット」、「GetComponentで取得」についてのメモです。
SerializeFiledとGetComponent
例えばスクリプト内でRigidbodyを操作したい場合、下記のような感じでSerializeFieldとして、Inspectorでセットするのが一つの方法です。
using UnityEngine; public class NewBehaviourScript : MonoBehaviour { [SerializeField] private Rigidbody2D _rb; }
もう一つが、下記のようにGetComponentで取得する方法です。
using UnityEngine; public class NewBehaviourScript : MonoBehaviour { private Rigidbody2D _rb; void Start() { _rb = GetComponent<Rigidbody2D>(); } }
どちらを利用するのが「効率的」、「より適切なのか」というもの。
効率は同じ・利用法で区別
下記にて、どちらでも「効率は変わらないよ」と言われていますね。使い分けとしては、コンポーネントを変える可能性がある場合はInspector、変えない場合はGetComponentとあります。
ソースをいじらなくても変更できるのがSerializeFieldの強みなので、当然と言えば当然なのかもしれませんが。あと、GetComponentは更新で使うと遅くなるからダメだよって感じですね。
個人的にはInspectorでセットした方が、場合によってはスクリプトがスッキリしそうだけど(上記の場合だとStartが不要)、まあ細かいですかね。