どーも、ぐるたか@guru_takaです。
ScriptableObjectが便利かつ作るときにググることが多いので、メモしておきます。
ScriptableObjectとは?
公式では、以下のように書かれています。
ScriptableObject はスクリプトインスタンスから独立した大量の共有データを格納できるクラスです。
引用:ScriptableObject | Unity公式
こんな風に共有データをこんな感じで一元管理できて便利!
メリットですが、丁寧にまとめらてた記事がありましたので引用します。
- メモリ節約
- パラメータの比較や管理が容易
- Unity上で確認、調整がしやすい。他のアセットを設定出来る。
- 作成や使用、拡張が簡単
- ロード時間が短く、メモリ使用量も軽減
メモリ節約ができるのは強いです。例えば、魚のデータ(名前など)を管理するとします。”マグロ”が100体いたとき、全てに”マグロ”という名前を格納する場所を用意するより、1つの場所で管理した方がメモリ節約になります。
しかも、管理が楽!!!便利で色々な場面で使えます。
ScriptableObjectの作り方
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のエディタ上では動いたりはするんですが、ビルドした後は動かなくなります。
コメントを残す