#ScriptableObjectを使ってみる
##ScriptableObjectとは
ScriptableObject は、クラスインスタンスとは無関係に、大量のデータを保存するために使用できるデータコンテナです。(Unityリファレンス)
と、言われてもむずかしいですね。スクリプタブルオブジェクト、と読みます。
ゲームを作る時でいえば、例えばたくさんアイテムのデータを作りたい時に使います。
たくさん作ったアイテムを一斉に管理する方法の一つ、と覚えてください。
今まで作ってきたゲームでは、プログラムは何かしらにくっつけて使うものでした。
例えば、Playerを動かすmove.csは、Player役のCubeとかにつけてたと思います。
しかし、ScriptableObjectはオブジェクトくっつけて使いません。というか、何にもくっつけません。
今回は実際に
緑のCube
青のCube
赤のCube
を拾って画面にアイテムとして表示できるようにします。
↓こんな感じ
##Itemを作る
###プログラムを書く
アイテムをたくさん管理するためのもの、と言いました。
アイテムのデータをたくさん作ることができるようになるプログラムを書きます。
いつものように、project
->c#Script
からプログラムを作って以下を書きましょう。名前はItemです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[Serializable]
[CreateAssetMenu(fileName ="Item",menuName="CreateItem")]
public class Item : ScriptableObject
{
[SerializeField]
private string itemName;
public string GetItemName()
{
return itemName;
}
}
まずはここに注目してください
public class Item : ScriptableObject
いつもと何かが違います。どこでしょうか?
いつもはScriptableObject
のところがMonoBehavior
となっていました。
ここで、このプログラムはScriptableObjectだよ〜とUnityに教えてあげていると思ってください。
つまりどこのオブジェクトにもくっつけなくてよくなります。
###unityでアイテムを作れるようになる
このプログラムを書くと、unityでアイテムがかんたんに作れるようになっています。
unityでproject
の+ボタンを押してみてください。一番上にCreateItem
というボタンが出現したはずです。
押してみましょう。
これを押すと次のようなものが現れます。
これで大量にアイテムの情報を作ることができるようになりました。
試しにItem Nameにgreencube
と名前を入れてみましょう。
これで名前が「greencube」っていうアイテムがありますよ、というデータがunityに誕生しました。
ただこれだけではデータは名前だけでちょっと寂しいです。
画像のデータも持てるようにしましょう。
[SerializeField]
private Sprite icon;
public Sprite GetIcon()
{
return icon;
}
これを追加してみましょう。
そうすると、さっきのアイテムデータのところに画像を追加する項目が出現します。
このIconに好きな画像を入れてみましょう。(後で使います。)
できたら、自分で複数アイテムを作ってみましょう。
今回はアイテムを大量に作れるようにしました。
次回はアイテムを管理するデータベースを作ります。