
ScriptableObjectを利用したSpriteの管理
-
2021年7月21日
こんにちは。ポケコロツインクライアント開発のSです。
今回はUnityのAsset管理でScriptableObjectを使用して運用を楽にする方法について説明します。
うまく活用することでリソースの管理が楽になると思うので、機会があればぜひ試してみてください。
ScriptableObjectとは?
ScriptableObjectは大量のデータを保存できるデータコンテナです。
詳しく知りたい方はUnity公式マニュアルをご確認ください。
https://docs.unity3d.com/ja/2019.4/Manual/class-ScriptableObject.html
ScriptableObjectでAsset管理をすることで以下のメリットがあります。
- 大量のデータを楽に保存することができる
- いろんなところで使用しているAssetを変更する際に、ScriptableObjectのにセットしてあるAssetを変更するだけで良いので管理が楽になる
- Unityでサポートしているほとんどのデータ形式で使用することができる
それでは、ScriptableObject Classから作成してみましょう。
ScriptableObject Classの作成
こちらがScriptableObjectを使用し作成したIconRarityScriptableObjectです。
例として今回はレア度によって異なるSpriteを設定したい時に使用するScriptableObjectを作成しました。
レア度を判別するRarityはenumを使用し、以下のように構成しています。
- enum Rarity
- {
- Normal = 1,
- Rare = 2,
- SuperRare = 3,
- }
- [CreateAssetMenu(menuName =
"
Test Sprite Holder/HogeHoge"
)] - class IconRarityScriptableObject : ScriptableObject
- {
- [System.Serializable]
- class Item
- {
- public Rarity key = default;
- public Sprite value = default;
- }
- [SerializeField]
- Item[] items = default;
- public Sprite Get(Rarity key)
- {
- for (int i = 0; i < items.Length; i++)
- {
- if (items[i].key == key)
- {
- return items[i].value;
- }
- }
- return null;
- }
- }
IconRarityScriptableObjectでは
- Spriteを持つItemクラスを作成する
- Itemクラスの配列を作成する
- Rarityを引数にGetメソッドを使用し、対応するSpriteをreturnする
という処理を行っています。
また、1行目のCreateAssetMenuAttributeによってUnityのAssetに新しい項目を追加することができます。
Assets → Create → Test Sprite Holder → HogeHoge
他にもCreateAssetMenuAttributeによってファイル名を設定したり、項目の位置を変更することもできます。
IconRarityScriptableObjectを生成し、確認すると先ほどのコードから追加したプロパティを確認することができます。
ValueにはKeyに対応したSpriteを設定しましょう。
(今回はポケコロツインで使用するアイコンSpriteを設定しました)
このScriptableObjectのGetメソッドを呼び出すことでレア度に対応したSpriteを受け取ることができます。
ScriptableObject適用確認
それでは早速試してみましょう。
- [SerializeField] IconRarityScriptableObject rarity = default;
- [SerializeField] Image normal = default;
- [SerializeField] Image rare = default;
- [SerializeField] Image superRare = default;
- public void Set()
- {
- normal.sprite = rarity.Get(Rarity.Normal);
- rare.sprite = rarity.Get(Rarity.Rare);
- superRare.sprite = rarity.Get(Rarity.SuperRare);
- }
上記の処理が書かれたClassを用意し、Setメソッドを実行します。
するとこのようにRarityに対応したアイコンが設定されていることを確認できるかと思います。
最後に
このようにScriptableObjectを使用することで簡単にAssetを管理することができます。
Assetを変更する必要がある時に簡単に変更ができるため、作業が効率的になります。
Assetのみならず、様々な物を管理することができるのでぜひ使ってみてください!
ココネでは一緒に働く仲間を募集中です。
ご興味のある方は、以下のリンクから是非ご応募ください。