今回はUnityで「キャラクターの選択画面」をScriptableObjectで実装してみました。
はじめに
以前、簡単なキャラクター選択画面を作成しました。これを元に改造していきます。
上記のボールをプレハブ化する前、下記の状態から進めていきます。
作成開始
まずは新規スクリプトを作成。Spriteだけを設定していますが、例えばキャラクター名のような異なるのがある場合、ここに追加。
using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] public class Ball { public Sprite ballSprite; }
もう一つスクリプトを作成。ScriptableObjectを利用してボールのデータコンテナを作成。
using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class BallDB : ScriptableObject { public Ball[] ball; public int BallCount { get { return ball.Length; } } public Ball GetBall(int i) { return ball[i]; } }
詳しくは下記のリファレンス。
Projectフォルダ内で「Create」→「BallDB」(作成したデータコンテナ)を追加。
BallDBにボールの画像(スプライト)を全てセットします。
下記スクリプトを作成。左右のボタンを押した時に、ボールが変更されるスクリプトです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallManager : MonoBehaviour { public BallDB _ballDB; public SpriteRenderer _sprite; private int selected = 0; void Start() { BallUpdate(selected); } public void Right() { selected++; if(selected>=_ballDB.BallCount) selected = 0; BallUpdate(selected); } public void Left() { selected--; if (selected < 0) selected = _ballDB.BallCount - 1; BallUpdate(selected); } public void BallUpdate(int selected) { Ball ball = _ballDB.GetBall(selected); _sprite.sprite = ball.ballSprite; } }
ballにスクリプトをアタッチ。
ボタンを押した時に呼び出すようにすれば完成。
ScriptableObjectを利用した方がキャラクター追加、項目追加になった時に修正ミスが起きにくい感じ。