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が不要)、まあ細かいですかね。