(Unity)GetComponentとTryGetComponent

(GetComponentの場合)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TryGet : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();

        rb.isKinematic = true;
    }
}

(コード上で要求されているコンポーネントを追加し忘れた場合のエラー文)

  • MissingComponentException: There is no ‘Rigidbody’ attached to the “Cube” game object, but a script is trying to access it.

(TryGetComponentの場合)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TryGet : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        TryGetComponent(out rb);

        rb.isKinematic = true;
    }
}

(コード上で要求されているコンポーネントを追加し忘れた場合のエラー文)

  • NullReferenceException: Object reference not set to an instance of an object

(TryGetComponentの活用事例)
  • nullを返すいうことは「true」「false」の判定が可能
  • 「条件文を作ることができる」ので、falseなら必要なコンポーネントを追加するコードを記述できる。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TryGet : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        if(!TryGetComponent(out rb))
        {
            rb = this.gameObject.AddComponent<Rigidbody>();
        }

        rb.isKinematic = true;
    }
}