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=・・・ 以下に続けましょう。

これで完成です。ツールバーからアセットを作りましょう!

画像1

で、使ってみた。

画像2

クリックして出来たヤツをいじっていきましょう。今回は自分で4種類のメッシュからランダムで割り当てるのでこんな感じで。

ついでにコインとかってクルクル回るイメージがあったので、回転速度も(オイラーだけど)書いておきましょう。

さて、データも作れたことですしこれを早速使っていきましょう。

使いかたは簡単、普通にドロップするだけ。(こんな感じ)

画像3

これでスクリプト内で参照して使えますね。便利です。

終わり

現時点ではあんまり共有データが多くなくあんまり軽量化している気がしないですが、ステータス関連で増え始めると実感できるんでしょうね。

とりあえず書き残しておけば、忘れかけても大丈夫でしょう。

この記事が気に入ったらサポートをしてみませんか?