MRが楽しい

MRやVRについて学習したことを書き残す

UnityのTryGetComponentで変数から型を推定してコンポーネントを取得する

本日は Unity の小ネタ枠です。
Unity の TryGetComponent で変数から型を推定してコンポーネントを取得する方法について記事にします。

TryGetComponent

TryGetComponent は指定の型のコンポーネントを1つ取得します。
メソッドは指定の型のコンポーネントを取得できた場合は true を返し、できなかった場合は false を返します。
docs.unity3d.com

本メソッドは Unity 2019.2 以降で利用可能です。

変数から型を推定してコンポーネントを取得する

GetComponent と TryGetComponent では以下のように取得したいコンポーネントの型を明示して実行することで、対象のコンポーネントを検索して取得できます。

// 型を明示してGetComponentを実行するパターン
var component = this.gameObject.GetComponent<Transform>();

// 型を明示してTryGetComponentを実行するパターン
this.gameObject.TryGetComponent<Transform>(out var component);

TryGetComponent では更に out 変数から型を推定してコンポーネントを取得する書き方もできます。

// 使用する型からも推論できるのでTryGetComponentの行で型を明示しなくてもよい
Transform targetTransform;
this.gameObject.TryGetComponent(out targetTransform);

これを利用することで、以下のようにプロパティで型を明示している変数などに対して TryGetComponet を用いると取得する箇所で型を明示しない書き方ができます。
・TryGetComponentTest02.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TryGetComponentTest02 : MonoBehaviour
{
    [SerializeField]
    private Transform targetTransform;
    
    void Start()
    {
        // 使用する型から推論できるのでここで型を明示しなくてもよい
        this.gameObject.TryGetComponent(out targetTransform);
    }
}