Inspectorでセット、GetComponentで取得【Unityメモ】

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

タイトルとURLをコピーしました