「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として読み込む神パッケージ

