コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【Unity】ゲームオブジェクトから安全にGetComponentする拡張メソッド

using System;
using UnityEngine;

/// <summary>
/// GameObject型の拡張メソッドを管理するクラス
/// </summary>
public static partial class GameObjectExtensions
{
    /// <summary>
    /// コンポーネントを取得します
    /// コンポーネントが存在しなければ追加してから取得します
    /// </summary>
    /// <typeparam name="T">取得するコンポーネントの型</typeparam>
    /// <param name="gameObject">GameObject型のインスタンス</param>
    /// <returns>コンポーネント</returns>
    public static T SafeGetComponent<T>(this GameObject gameObject) where T : Component
    {
        return 
            gameObject.GetComponent<T>() ?? 
            gameObject.AddComponent<T>();
    }
}
using UnityEngine;

public class MyBehaviourScript : MonoBehaviour
{
    private void Start()
    {
        var myComponent = gameObject.SafeGetComponent<MyComponent>();
    }
}

指定したコンポーネントがアタッチされている場合はそれを取得します
アタッチされていない場合は追加してから取得します

地味に便利