【Unity入門】ScriptableObjectの使い方をわかりやすく解説!データ管理がラクになる!

PR

Unityで開発を進めていると、キャラクターのステータスアイテムの情報など、たくさんのデータを管理する必要が出てきます。
そんなときに便利なのが 「ScriptableObject(スクリプタブルオブジェクト)」 です。

この記事では、初心者の方でもわかるように、

  • ScriptableObjectとは何か
  • どうやって作るのか
  • どんなときに使うと便利なのか
    を順番に解説します!
PR

ScriptableObjectとは?

ScriptableObjectは、データを保存するための特別なクラスです。
通常のC#スクリプトとは違い、シーンに配置しなくても使えるのが大きな特徴です。

たとえば、以下のような場面で活躍します👇

  • キャラクターのステータスを複数キャラ分まとめて管理したい
  • アイテムや武器の情報を一覧で保存したい
  • ゲームの設定値(難易度、スピードなど)をエディタ上で簡単に調整したい

ScriptableObjectを作ってみよう!

それでは実際にScriptableObjectを作ってみましょう。
ここでは「キャラクターのステータス」を例に説明します。

① スクリプトを作成する

まずは新しいC#スクリプトを作成し、名前を CharacterData.cs にします。

using UnityEngine;

[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Game/Character Data")]
public class CharacterData : ScriptableObject
{
    public string characterName;
    public int hp;
    public int attackPower;
}

ポイント解説 💡

  • ScriptableObject を継承することで、スクリプタブルオブジェクトになります。
  • [CreateAssetMenu] 属性をつけると、Unityのメニューから簡単に作成できるようになります。

② アセットを作成する

  1. プロジェクトビューで右クリック
  2. Create > Game > Character Data」を選択
  3. 新しいアセットファイルが作成されます
Screenshot

“Game”の項目がなければ、Create > Update UXML Schemaをクリックして更新しましょう。

作成されたアセットをクリックすると、インスペクターで
名前・HP・攻撃力などを入力できます。

③ スクリプタブルオブジェクトを使う

次に、このデータを使うスクリプトを作ってみましょう。

using UnityEngine;

public class Character : MonoBehaviour
{
    [SerializeField] private CharacterData characterData;

    private void Start()
    {
        Debug.Log($"{characterData.characterName} のHPは {characterData.hp} です。");
    }
}

このスクリプトをゲームオブジェクトにアタッチして、
インスペクターで characterData に作ったアセットをドラッグ&ドロップします。

ゲームを再生すると、コンソールにデータが表示されます!

ScriptableObjectを使うメリット

① シーンに依存しない

ScriptableObjectはシーンに配置しなくても存在できるので、
データをどのシーンからでも共有できます。

② データを整理しやすい

プレハブやスクリプトに埋め込むよりも、Projectウィンドウで一覧管理できて便利です。

ScriptableObjectが活躍する例

  • アイテム管理
    → 武器や防具のパラメータをまとめる
  • 敵キャラのデータ
    → 種類ごとにステータスを切り替える
  • ゲーム設定
    → 難易度・音量などを調整可能にする

まとめ

項目内容
ScriptableObjectとは?シーンに依存しないデータ保持用クラス
作り方ScriptableObjectを継承して [CreateAssetMenu] をつける
メリットデータの共有・整理が簡単、メモリ効率も良い
使いどころキャラデータ、アイテム、設定などに最適

ScriptableObjectを使うことで、データの管理がスッキリ整理できるようになります。
最初はちょっと抽象的に感じるかもしれませんが、
一度使いこなせるようになると、開発効率が一気に上がります!