キャラクター選択画面-ScriptableObject-【Unity】

今回は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を利用した方がキャラクター追加、項目追加になった時に修正ミスが起きにくい感じ。

タイトルとURLをコピーしました