短編RPG制作(Unity2D)【第24回】勉強:ScriptableObject
ノートPC(Unityインストールしてない……)しか使えない状態なので、理解しきれていないScriptableObjectについて勉強しようと思います。
調べた内容をまとめるだけですけど。
ScriptableObject
メモリが節約できる
メリット1つ目は、メモリの節約になることです。これが「Prefub」との大きな違いではないでしょうか。
「Prefub」からオブジェクトを複数作成する場合、各オブジェクトのパラメーター(アタッチされたスクリプトに記載されている)は同じ値ですが、別々のものとして扱われています。オブジェクトが増加するにつれてメモリの容量を圧迫することになります。
一方、「ScriptableObject」から値を読み込む場合、複数オブジェクトを作成しても参照元は1つです。余計にパラメーターを格納する必要がなくなります。
……書いていて思ったのですが、「Prefub」に「ScriptableObject」を組み合わせればいいのでは?今度試してみます。
簡単に作れる
他の手段が分からないので何とも実感がわきませんが、簡単に作成できることもメリットのようです。
確かに、下記の2行さえ押さえておけば簡単に作れます。右クリックショートカットへの追加とScriptableObjectクラスの継承ですね。
[CreateAssetMenu(fileName = "Item", menuName = "ScriptableObjects/ItemData")]
public class ItemData : ScriptableObject{}
Unityエディタ上での変更が反映される
Unityエディタ上でゲームを再生している最中に値を変更すると、それがリアルタイムで反映されます。再生を停止しても変更は維持されたままです。
ゲームをテストしながら調整する際に非常に便利です。
どのシーンからでも参照できる
ゲームオブジェクトではないので、シーンに依存しません。どのシーンでも同様に呼び出すことができるので、変わらない変数を入れておくのが主な使い方になるでしょう。
値のセーブ目的では使えない
Unityエディタ上での値は即時反映されますが、実機での変更は反映されません。そのため、セーブデータとして扱うことは難しそうです。
まとめ
まとめると、使いどころは変数の値が変わらない部分……ゲームだとアイテム情報や敵ステータスでしょうか。他にも使えそうなところがあれば試してみたいです。
明日もメインPCには触れないので、今度はクラスの継承について勉強します。
この記事が気に入ったらサポートをしてみませんか?