ScriptableObjectとは
ScriptableObjectは、データの収納庫として機能し、それを使ってゲーム内で何度でも利用できるんです。ゲームの外にデータを置いておくための便利な箱みたいなものです。
これによって、データを何度も書かなくても済むし、ゲーム開発がスムーズに進めることができます。
例えば、ゲームに出てくるアイテムの情報をここに入れておくと、同じアイテムをどこでも何度でも使い回すことができます。これがScriptableObjectの特徴です!
ScriptableObjectを作る
ScriptableObjectは、Unityのエディタ上でとっても簡単に作れます。
まずはC#スクリプトを作成してScriptableObjectで使いたい情報を入力します。
例えばアイテムの情報やキャラクターのステータスなどを入力します。
// ItemData.cs
using UnityEngine;
[CreateAssetMenu(fileName = "New Item", menuName = "Item Data")]
public class ItemData : ScriptableObject
{
public string itemName;
public int itemID;
public float itemWeight;
// 他にも必要なアイテムの情報を追加できます
}
スクリプトを保存したらAssetsフォルダ(プロジェクト内のファイルを入れておく場所)で右クリックして、「Create」→「ScriptableObject」(上のコードの場合Item Data)を選びましょう。

そうすると、新しいScriptableObjectができあがります。

データを入力する
できたScriptableObjectをダブルクリックして開くと、エディタが現れます。

ここに、例えばアイテムの情報や画像、キャラクターのステータスなど、使いたいデータを詰め込んでいきます。
データの形式は、文字や数字、色々ありますが、分かりやすい形で書くといいですね。
ScriptableObjectを使う
作ったScriptableObjectを使うには、スクリプトで呼び出す必要があります。
例えば、アイテムの情報が詰まったScriptableObjectを使う場合、アイテムを管理するスクリプトで、そのScriptableObjectを指定するといいです。
そうすることで、アイテム情報を取り出して使えるようになります。
// ItemGenerator.cs
using UnityEngine;
public class ItemGenerator : MonoBehaviour
{
public ItemData itemData;
void Start()
{
GenerateItem();
}
void GenerateItem()
{
Debug.Log("生成されたアイテム: " + itemData.itemName);
Debug.Log("アイテムID: " + itemData.itemID);
Debug.Log("アイテム重さ: " + itemData.itemWeight);
// 他にもアイテム生成に関する処理を追加できます
}
}
これで、同じScriptableObjectを何度でも使い回すことができます。
別の場所や別のシーンで同じデータを使いたいときも、このScriptableObjectを呼び出すだけでOK。
データの変更も、ScriptableObjectの中身を変えるだけで、使っているところ全部に反映されます。