コガネブログ

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

【Unity】gameObjectプロパティを使わなくてもAddComponentを可能にする拡張メソッド

public static void InitGameController(GameController gameController)
{
    gameController.gameObject.AddComponent<ScoreKeeper>();
    gameController.gameObject.AddComponent<TimeKeeper>();
}

例えばMonoBehaviourを継承したGameControllerコンポーネントが存在して
GameControllerコンポーネントがアタッチされたオブジェクトに
スコアを管理するScoreKeeperコンポーネントと
制限時間を監理するTimeKeeperコンポーネントをアタッチしたい場合
gameObjectプロパティが持つAddComponent関数を使う必要がありますが
下記のような拡張メソッドを用意すると

/// <summary>
/// コンポーネントを追加します
/// </summary>
/// <typeparam name="T">追加するコンポーネントの型</typeparam>
/// <param name="component">Component型のインスタンス</param>
/// <returns>追加したコンポーネント</returns>
public static T AddComponent<T>(this Component component) where T : Component
{
    return component.gameObject.AddComponent<T>();
}
public static void InitGameController(GameController gameController)
{
    gameController.AddComponent<ScoreKeeper>();
    gameController.AddComponent<TimeKeeper>();
}

gameObjectプロパティを呼び出す必要がなくなるので
少しだけソースコードを短く書けます