i-school - 簡易データベースの作成

シングルトンと入れ子クラスを利用した簡易データベースの作成手順

 アイテムや敵のデータなどを扱う場合に、データベースのようなものがあると管理や扱いが楽になります。
Unityにはスクリプタブル・オブジェクトという機能(こちらはアセットとしてデータベースを扱う方法)もありますが
今回は別の方法で、簡易的に作成できるデータベースの作り方を進めていきます。

 手順としましては、以下の順番です。
 1.GameDataという名前のシングルトンクラスを作成する。
 2.作成したシングルトンクラス内に、クラスを1つ作成する(入れ子(ネスト)クラス)

 ※ 2の入れ子となるクラスをリスト化して管理することにより、データベースとして扱えるようにしていきます。
 
 ではこの手法を使って、今回は、ゲーム内に登場するアイテムのデータをデータベースとして登録できるようにしていきます。

1.シングルトンクラスを作成する

 新しいC#スクリプトを1つ作成します。名前はGameDataにします。
このGameDataクラスを様々なデータのデータベースとして利用できるようにします。
データベースとしての機能を持ちますので、ゲーム内のいずれのクラスからでも参照が取りやすい方が便利です。
そこで、GameDataクラスをシングルトンとしての振る舞いを持たせるようにします。

 シングルトンとは、プログラムにおけるデザインパターンと呼ばれるものの1つのパターンです。
今回利用するシングルトンというデザインパターンは、あるクラスのインスタンスを1つしか生成しないパターンの事です。

 そのため、このシングルトンパターンのクラスはゲーム内に常に1つしか存在しないことが保証されます。

 逆説的に考えると、このシングルトンクラスは他に同名クラスが存在しないことが保証されているため、
シングルトンクラスに対しては、どのクラスからでも変数への代入なしで参照することが出来ます。
(本来であればクラス内のpublicな変数や関数を参照するために変数を用意して代入し、呼び出していた手順が不要になります。)

 シングルトンパターンの書式は様々ありますが、ここではプロパティを用いない書式で実装を行います。

 それではGameDataクラスを作成していきます。
 

<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。

2.入れ子(ネスト)クラスを作成して、その入れ子クラスのリストを作成する

 アイテム用のデータをデータベースとして使えるように、ItemDataクラスを入れ子クラスとして作成しましょう。
なお、クラス内に入れ子として作成するクラスの数に制限はありません。

 なお入れ子クラスには、属性情報として[System.Serializable]を忘れずに追加しましょう。
この属性があると、インスペクター上でリスト化した入れ子クラスが表示されますので、そこで数値などの設定が行えます。

 GameDataクラスを修正し、入れ子クラスを追加します。
またそのクラスをリスト化することにより、データベースとして扱えるようにします。

<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。

GameDataゲームオブジェクトを作成し、インスペクター上からアイテムのデータを登録する

 ヒエラルキーに新しいゲームオブジェクトを1つ作成し、名前をGameDataに変更します。
先ほど作成したGameDataクラスをGameDataゲームオブジェクトにアタッチします。



 アタッチに成功すると、インスペクター上にItemDataというリストが表示されます。
Sizeが0になっていますので、そちらに任意の数を入力すると、同数のElemntが作成されます。

 こちらにItemDataのクラスの内容を1つずつ登録できます。早速登録してみましょう。