Unity解説 ScriptableObjectによるパラメータ管理

 

 

ゲームのプレイヤーのパラメータとかを操作・管理したいんだけど、何か良いのある?

 

 

 

それならば、「ScriptableObject」を使うのがおススメです。

 

 

「ScriptableObject」とは、共有データを使いやすく管理できる仕組みを作れるクラスです。

 

 

また、メモリの使用効率が良くデータ管理ができるということも「ScriptableObject」の大きな特徴ですね。

 

 

【参考】

 

 

 

何かすぐにイメージは湧かないけど、、とりあえずのデータ管理には、それを使っておけば良さそうなかんじだね💨

 

 

はい✨

実際には、csvやjsonを使ったりなどの他の方法もありますが、、、

 

 

それらの方法と比べても「ScriptableObject」には色々なメリットがあり、使い方を知っておいて損はありません。

 

 

さて、「ScriptableObject」を使ってデータ管理をするためには、最低3つのものが必要になります。

 

 

①データアセットを作るスクリプト、②データアセット、③データアセットを活用するためのスクリプトの三つです。

 

 

 

まず、①データアセットを作るスクリプトを作ってみます。

 

 

PlayerParamCreate.cs

using UnityEngine;

[CreateAssetMenu(fileName = "PlayerData", 
menuName = "ScriptableObjects/CreatePlayerParam")]

public class PlayerParam : ScriptableObject
{
    public string PlayerName;
    public int PlayerHP;
    public int PlayerSP;
    public int PlayerScore;
}

 

 

いつもの「MonoBehaviour」じゃなくて、「ScriptableObject」を継承するんだね。

 

 

はい、そのためスクリプト名とクラス名は、いつもみたいに揃えなくて良く、オブジェクトにアタッチする必要もありません。

 

 

このスクリプトを「Assets」内のどこかに配置するだけで機能をさせることができます。

 

 

「プロジェクトウィンドウ」を右クリックし、「Create」>「ScriptableObjects」>「CreatePlayerParam」を押すと、、、

 

 

「PlayerData」というアセットが作成されます。

 

 

☑ データアセットの作成

 

 

 

 

 

 

 

「PlayerData」のInspector欄に使いたいパラメータの入力を行います。

 

 

下のように入力した💨ちゃんとゲームのパラメータっぽいね✨

 

 

☑ パラメータの入力

 

 

ここまでが②でして、次は③データアセットを活用するためのスクリプトを作ってみます。

 

 

まずは、「PlayerData」に設定した「PlayerName」を画面に表示するスクリプトを作ってみます。

 

 

ParamDisplay001.cs

using UnityEngine;

public class ParamDisplay001 : MonoBehaviour
{
    [SerializeField] private string PlayerName;
    [SerializeField] private PlayerParam PlayerData001;

    void OnGUI()
    {
        PlayerName = PlayerData001.PlayerName;
        GUI.Label (new Rect (75, 100, 150, 50), PlayerName);
    }
}

 

 

「PlayerData001」の宣言をしているところの「PlayerParam」は、前に作ったスクリプト「PlayerParamCreate.cs」のクラス名になります。

 

 

こちらのスクリプトは空のオブジェクトを作成して、そちらにアタッチします。

 

 

アタッチ後、空のオブジェクトのInspector欄に「Player Data 001」欄が現れますので、そちらに「PlayerData」をドラッグ&ドロップします。

 

 

 

 

 

それではゲームを実行してみましょう。

 

 

 

 

 

ちゃんと名前が表示されているね。

 

 

ええ✨

それでは次は他のパラメータを表示し、キーボードの「A」を押すと「PlayerScore」が増えるスクリプトを作ってみます。

 

 

ParamDisplay005.cs

using UnityEngine;

public class ParamDisplay005 : MonoBehaviour
{
    [SerializeField] private string PlayerName;
    [SerializeField] private int PlayerHP;
    [SerializeField] private int PlayerSP;
    [SerializeField] private int PlayerScore;
    [SerializeField] private PlayerParam PlayerData001;

    void Start()
    {
        PlayerName = PlayerData001.PlayerName;
        PlayerHP = PlayerData001.PlayerHP;
        PlayerSP = PlayerData001.PlayerSP;
        PlayerScore = PlayerData001.PlayerScore;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            PlayerScore += 1;
        }
    }  

    void OnGUI()
    {
        GUI.Label (new Rect (25, 50, 150, 50), PlayerName);
        GUI.Label (new Rect (25, 70, 150, 50), PlayerHP.ToString());
        GUI.Label (new Rect (25, 90, 150, 50), PlayerSP.ToString());
        GUI.Label (new Rect (25, 110, 150, 50), PlayerScore.ToString());
    }
}

 

 

では、ゲームを実行しましょう。

 

 

前のスクリプト「ParamDisplay001.cs」をリムーブすることと「PlayerData」をドラッグ&ドロップすることを忘れないでくださいね。

 

 

 

 

Aボタンでスコアが上がっていく💨

 

 

とりあえず、基本的な使い方は大丈夫そうですね✨

応用させれば本当に色々なことができるので、これからも活用していきましょう。

 

 

 

 

 

 

 

 

お名前


削除キー(必須)

コメント(必須)


サイト内検索

twiter

CONTENTS

 

 

 

くるくるサンプルコード

 

 

 

【↓広告↓】