新しいC#スクリプトを1つ作成します。名前はGameDataにします。
このGameDataクラスを様々なデータのデータベースとして利用できるようにします。
データベースとしての機能を持ちますので、ゲーム内のいずれのクラスからでも参照が取りやすい方が便利です。
そこで、GameDataクラスをシングルトンとしての振る舞いを持たせるようにします。
シングルトンとは、プログラムにおけるデザインパターンと呼ばれるものの1つのパターンです。
今回利用するシングルトンというデザインパターンは、あるクラスのインスタンスを1つしか生成しないパターンの事です。
そのため、このシングルトンパターンのクラスはゲーム内に常に1つしか存在しないことが保証されます。
逆説的に考えると、このシングルトンクラスは他に同名クラスが存在しないことが保証されているため、
シングルトンクラスに対しては、どのクラスからでも変数への代入なしで参照することが出来ます。
(本来であればクラス内のpublicな変数や関数を参照するために変数を用意して代入し、呼び出していた手順が不要になります。)
シングルトンパターンの書式は様々ありますが、ここではプロパティを用いない書式で実装を行います。
それではGameDataクラスを作成していきます。
<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameData : MonoBehaviour {
public static GameData instance;
void Awake() {
if (instance == null) {
// 自分(GameDataクラス)をinstance変数に代入
instance = this;
// シーン遷移しても破棄されないようにする
DontDestroyOnLoad(this.gameObject);
} else {
// 複数のGameDataクラスが存在する場合、破棄する
Destroy(this.gameObject);
}
}
}