「ScriptableObjectでデータ管理が楽になる」という話に興味はありますでしょうか?
そもそもScriptableObjectとは、ひとことで言うと、「使いまわせるデータをアセットとして保存できる機能」です。
スクリプトなのに、プレハブでもなく、シーンに置かなくてもいい——そんな不思議で便利なデータ容器のことです。
ScriptableObjectの活躍場面
- キャラクターのステータスや属性をまとめたい(HP、攻撃力、スピードなど)
- アイテムの一覧を管理したい(名前・説明・画像・効果など)
- 敵ごとの行動パターンや耐性をデータ化して再利用したい
- ステージ設定をアセット化して、複数のシーンで使いまわしたい
RPGなら「回復薬」「毒消し草」などのアイテムデータ、
アクションゲームなら「スライム」「ドラゴン」などの敵キャラの設定、
タワーディフェンスなら「Waveの構成」や「出現タイミング」など、ゲームの静的データといった、所謂「マスターデータ」をScriptableObjectにまとめておくと、管理がとてもラクになります。
ScriptableObjectの作り方
それでは、実際にScriptableObjectを作ってみましょう。
今回は、アイテムデータをScriptableObjectとして定義していきます。
① ScriptableObjectのクラスを作る
using UnityEngine;
[CreateAssetMenu(menuName = "MyGame/ItemData")]
public class ItemData : ScriptableObject
{
    public string itemName = "賢人パン";
    public Sprite icon;
    public int power = 10;
}- 【重要】ScriptableObjectを継承することで、「アセット化可能なスクリプト」になります。
- [CreateAssetMenu]を付加しておくと、エディタから右クリックで- .assetを新規作成できるようになります。
- itemNameや- powerは、インスペクターで直接編集可能。
② アセットを作成する
- Unityエディタの Projectウィンドウで右クリック
- Create > MyGame > ItemDataを選ぶ
- HealingItem.assetのように名前をつけて保存
- インスペクター上で itemNameやpowerを編集!
これで、スクリプトではなく.assetファイルとして保存されたゲームデータの完成です!
ScriptableObjectを使ってゲームに組み込む
作ったアイテムデータを、ゲーム内でどう使うのか? 実際の例を見てみましょう。
③ 参照するスクリプトを書く
using UnityEngine;
using UnityEngine.UI;
public class ItemDisplay : MonoBehaviour
{
    public ItemData itemData;  //.assetファイル
    public Text nameText;    //アイテム名表示用テキスト
    public Image iconImage;  //アイコン表示用画像
    void Start()
    {
        nameText.text = itemData.itemName;
        iconImage.sprite = itemData.icon;
        Debug.Log($"アイテム「{itemData.itemName}」の回復力は {itemData.power} です");
    }
}- public ItemData itemData;とすることで、インスペクターに- .assetをドラッグ&ドロップできます。さきほど作成した- HealingItem.assetを設定してみましょう。
- itemDataの内容を反映するUIパーツ(TextやImage)はCanvas下に作っておいて下さい。
- デバッグログで、アイテムの性能を出力しています。
- 出力例:アイテム「賢人パン」の回復力は 10 です
 
MonoBehaviourと何が違うの?
ScriptableObjectはシーンに存在しません。
故に、Update() などのコールバックも動きません。シーンにアタッチせずに、データファイルとして存在しますので、あくまで「設定ファイル」や「テンプレート」のような使い方がメインです。
その代わり、複数のオブジェクトで共有できる&変更しても反映しやすいという大きなメリットがあります。
まとめ:データを制す者は開発を制す!
- ScriptableObjectは「再利用できるデータファイル」だと覚えよう
- CreateAssetMenuを使えば、右クリックでサクサク作れる
- ゲーム中のあらゆる設定値をアセットとして切り出せるので、保守・調整が超ラクに
「まだ難しそう…」と思った方も、1つ作って動かしてみれば「あ、便利!」と感じられるはずです。
過去に旧ブログで「ExcelファイルのデータをScriptableObject化するアセット」の紹介を行っています。興味があればそちらも合わせてどうぞ!
【Unity】ExcelのxlsxファイルをScriptable Objectとして読み込む神パッケージ
 
  
  
  
  
