【Unity】ScriptableObjectが便利だったので、使い方をまとめてみた

どーも、ぐるたか@guru_takaです。

ScriptableObjectが便利かつ作るときにググることが多いので、メモしておきます。

ScriptableObjectとは?

公式では、以下のように書かれています。

ScriptableObject はスクリプトインスタンスから独立した大量の共有データを格納できるクラスです。
引用:ScriptableObject | Unity公式

こんな風に共有データをこんな感じで一元管理できて便利!

メリットですが、丁寧にまとめらてた記事がありましたので引用します。

  • メモリ節約
  • パラメータの比較や管理が容易
  • Unity上で確認、調整がしやすい。他のアセットを設定出来る。
  • 作成や使用、拡張が簡単
  • ロード時間が短く、メモリ使用量も軽減

引用:ScriptableObjectとは【Unity】【ScriptableObject】

メモリ節約ができるのは強いです。例えば、魚のデータ(名前など)を管理するとします。”マグロ”が100体いたとき、全てに”マグロ”という名前を格納する場所を用意するより、1つの場所で管理した方がメモリ節約になります。

しかも、管理が楽!!!便利で色々な場面で使えます。

ScriptableObjectの作り方

STEP.1
Scriptでひな形を作成
STEP.2
Asset作成
STEP.3
オブジェクトに継承すればOK!

Step.1;Scriptでひな形を作成

以下のようなScriptでひな形を作成します。

using UnityEngine;

[CreateAssetMenu(menuName = "Param/Fish")]//Param/Fishはメニューから作成するときの文面
public class Fish : ScriptableObject
{
    public string name;
    public int size;

}

Step.2;Asset作成

以下のように作成します。

ここではマグロのデータを作ってみました!

Step.3;オブジェクトに継承

あとは、作成したAssetをインスペクターからオブジェクトに継承できるようにScriptを作成。インスペクターから作成Asset(ここではマグロデータ)をアタッチすれば完成!

using UnityEngine;

public class Maguro : MonoBehaviour
{
    [SerializeField]
    Fish fishData;
}

注意点

インスペクター上から直接、値を変更する分には問題ないのですが、エディタ上で変更しても、プレイした時やUnityを再起動すると値がリセットされるので注意してください。
参考記事のタイトルとURLを入力してください” title=”http://kan-kikuchi.hatenablog.com/entry/ScriptableObject_SetDirty_SaveAssets” site=”ScriptableObjectの変更した値が戻ってしまう場合の対処法【Unity】【ScriptableObject】【トラブルシューティング】” target=”_blank”]

またクラス名とファイル名は同じでないと、エラーが出てくるので必ずチェックしておきましょう。これでも、Unityのエディタ上では動いたりはするんですが、ビルドした後は動かなくなります。

参考リンク

参考 【Unity】ScriptableObjectってなんなん? って時に読む記事【解説】エクスプラボ

コメントを残す