本文へスキップ
BecomeCoder

C#実践コース · 第8章 Unity開発 · レッスン50

UnityでのC#設計(ScriptableObject)

ローカル実施

導入

ゲームが大きくなると、これまで学んだ設計の知識(SOLID・パターン)がUnityでもそのままC#の武器になります。特にUnity特有のScriptableObjectは「データをアセットとして分離する」ための強力な仕組みです。

図解

flowchart TB
    SO["ScriptableObject<br/>EnemyData(HP・攻撃力・名前)<br/>=データをアセット化"]
    SO --> E1["スライム.asset<br/>HP10 / 攻撃2"]
    SO --> E2["ドラゴン.asset<br/>HP500 / 攻撃80"]
    E1 --> USE["Enemyスクリプトが参照して動く"]
    E2 --> USE
    style SO fill:#e8f5e9

サンプル(Unity C# ― 読み物)

using UnityEngine;

// ScriptableObject: ロジックを持たない「データの入れ物」をアセットとして作れる
// ( record 的な役割を、Unityのアセットとして実現)
[CreateAssetMenu(menuName = "Game/EnemyData")]
public class EnemyData : ScriptableObject
{
    public string enemyName;
    public int maxHp;
    public int attack;
}

// データ(EnemyData)とロジック(Enemy)を分離する=単一責任の原則
public class Enemy : MonoBehaviour
{
    public EnemyData data;   // Inspectorでスライムやドラゴンの.assetを差し込む

    void Start()
    {
        Debug.Log($"{data.enemyName} 出現(HP {data.maxHp})");
    }
}
  • ScriptableObjectはデータをアセット化する仕組み(値の設定をコードから分離)
  • データ(EnemyData)とロジック(Enemy)を分けるのは単一責任の原則そのもの
  • イベント・Strategy・DIもUnityでそのまま有効
  • 「Unityだから特別」ではなく、これまでのC#設計知識が土台になる

Unityで試す

  • EnemyDataスクリプトを作り、メニューから「スライム」「ドラゴン」の.assetを2つ作成する
  • Enemyスクリプトのdataにそれぞれを割り当て、出現ログが変わることを確認
  • 「1つのデータを複数の敵が共有する」設計の利点(バランス調整が1か所で済む)を体感する

まとめ

  • ScriptableObjectはデータをアセットとして分離する仕組み
  • データとロジックの分離=SOLID(単一責任)の実践
  • これまでのC#設計知識(SOLID・パターン・DI)がUnityでも武器になる

次章: クラウドを C# から操作する「AWS SDK for .NET」へ進みます。