ScriptableObjectを使いたい!
またも備忘録的な文章ですので、もうわかりますよね、自分用です。
ScriptableObjectって?
を読んだ感じ、メモリ消費を抑えられるらしいですね。ゲーム作るときは大事になってきそうですね。(適当)
使いかたとしては共有データ(不変ステータスとか)を入れておいて使うときだけ参照する感じですかね。
敵が多くなってくると、どうせ同じ数値なのにメモリ食ってるともったいないですもんね。
実際に使っていきましょう~。
とりあえずコードを
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = "MyScriptableObject/scrapsData")]
public class scrapsData : ScriptableObject
{
[Header("Scraps_Models")]
public Mesh[] mesh;
public Vector3 rotationSpeed;
}
ってことで、スクリプトです。ミジカクテイイデスネー。
今回はステージに散らばるコインのような感覚で、様々なメッシュをそのコインもどきに割り当てたいんですね。みんな同じ見た目しているよりは面白そうじゃないですか?
さて、まず普段のスクリプトと違うのは継承しているクラスです。
MonoBehaviour じゃなくて ScriptableObject が継承されてますね。
クラス名からわかるようにScriptableObject使うためにはこれを継承しなくてはいけません。
その後にある変数はまあ、普通に変数です。ヘッダー(Header)で説明を見れるようにもしてあります。
だいたいはこれでスクリプトは終わりですが、インスペクターで調整するためにカスタムアセットを作ります。
そのための[CreateAssetMenu(・・・)]です。
これを付けるとエディタの上のバーにメニューを追加できます。
今回作るのはカスタムアセットですので、アセットメニューの下に自作ScriptableObjectを入れておく枠を作りましょう。
名前は・・・MyScriptableObject ですね。(安直)
で、その名前を menuName=・・・ 以下に続けましょう。
これで完成です。ツールバーからアセットを作りましょう!
で、使ってみた。
クリックして出来たヤツをいじっていきましょう。今回は自分で4種類のメッシュからランダムで割り当てるのでこんな感じで。
ついでにコインとかってクルクル回るイメージがあったので、回転速度も(オイラーだけど)書いておきましょう。
さて、データも作れたことですしこれを早速使っていきましょう。
使いかたは簡単、普通にドロップするだけ。(こんな感じ)
これでスクリプト内で参照して使えますね。便利です。
終わり
現時点ではあんまり共有データが多くなくあんまり軽量化している気がしないですが、ステータス関連で増え始めると実感できるんでしょうね。
とりあえず書き残しておけば、忘れかけても大丈夫でしょう。
この記事が気に入ったらサポートをしてみませんか?