Game Data Editor の紹介

Unity アセット真夏のアドベントカレンダー 2018 Summer! の17日目(8/17)の記事です。


はじめに

GameDataEditor(以下GDE)はStay At Home Devs LLCによるUnity用のアセットです

GDE

43.20ドルで有料販売されていますが、無料版も用意されています。

GDEはPlayersprefと同じように各種変数を保存できますが、保存先としてローカルテキストのほかにGoogleスプレットなどに保存できるのが特徴です。

Googleスプレットに対応したことで複数人でのデータのアップデートが簡単にできたり、暗号化やplayMakerにも対応し、さまざまなアプリで利用が可能です。

今回はGDEの有料版を利用してGoogleスプレット上にあるデータの読み出し、書き込みなどを行いながらGDEの紹介をします。

なお、制限はありますが、無料版でもGoogleスプレットと連携が可能です。



GDE利用のシチュエーション

RPGなどのデータ管理が必要なアプリのデータ管理に利用できます。

データが多い場合にGoogleスプレットやエクセルでデータを管理することがありますが、問題となるのがアプリへの適用です。

Sqliteなどにデータをコピーして利用してもいいですが、作ったデータをそのまま利用できたら便利だと思います。

GDEはデータをGoogleスプレットやエクセルで管理しつつ、Unity側ではデータの場所を意識することなく利用可能です。

また、データをプログラマとは別の人間が担当し、必要に応じてGDE側でインポートして利用できます。

ただし、Playerprefの代わりに利用できますが、mbaasのような使い方はできないので注意が必要です。


利用手順

有料版を利用しますが、無料版で作ったデータもそのまま有料版に移行できます。

アセットをインストールした後は下記のような流れで利用することになります。
  1. schemaの作成
  2. データクラスの作成
  3. GDEでのデータの作成
  4. Googleスプレット利用設定
  5. Googleスプレットでのデータの追加編集
  6. スクリプトでデータを読み書き
GDEではデータの構造であるschemaを元にしたデータクラスを利用し、Unityのスクリプトから読み書きできます。

実際のデータの場所(テキストやGoogleスプレットなど)を気にすることなく使えるのが利点といえます。



データの扱いについて

扱えるデータ形式(BasicFieldType)は下記の通りです。

GDE BasicField

データはデータ構造(Schema)を設定してItemとして追加編集していきます。


データのschema作成

GDEの各種メニューは下記のようにインストール後はUnityのメニューとして組み込まれます。

GDEMenu


SchemaEditorを起動し、Create New Schema にて新しいデータを設定します。

gdecreateschema

schemaの作成手順としては、BasicFiledTypeを選択し、フィールド名を設定してAddFieldで追加となります。

今回は武器と防具を登録するため、Schema名を「ARM」、武器、防具の名前をString型でWEP,PROと2つ設定しています。

GDESCHEMA


データクラス作成

GDEではSchemaで設定したデータ構造をクラス化してスクリプトから利用しやすくしています。

無料版ではクラスの自動作成機能が使えず、有料版のみの機能となります。

GDEClassgenerate


GDEでのデータ作成

schemaを設定したら、実際にデータを入力してみます。

データはスプレットなどからも追加できますが、今回はGDE Item Editorを利用します。

データはスキーマで設定したクラスを雛形に増やしていきます。
GDEItemEditor

ItemEditorではスプレットなどからImportしてデータを編集、追加することも可能です。

GDEItemEditor

Schemaで既存のschemaを選択すると追加・編集できます。

GDElist


Googleスプレット利用設定

GDEはアプリにデータを持ちますが、GoogleスプレットやExcelとの連携も可能です。

今回はGoogleスプレットとの連携を行います。

スプレットとの連携ではデータのインポート、エクスポートができるほか、Schemaが変更された場合でもエクスポートすることで随時更新されます。

インポート、エクスポートはSchema,Itemそれぞれのエディタで対応可能です。

gdeimport
Googleスプレットを初めて使う場合はGoogle側の手順に従ってください。



Googleスプレットでのデータの追加編集

google sp

ItemEditorでデータを作り、Googleスプレットにエクスポートした状態です。

Schemaで作ったARMを雛形に、Level1,Level2が設定されています。

データ構造もスプレット側で修正可能です。

Googleスプレットと連携できれば、GDE側でインポート・エクスポートする都度、Googleスプレット側も自動更新されます。


スクリプトでデータを読み込む


GDEで作ったデータを読み込むにはGDEのライブラリ初期化をして、データ構造に合わせてクラスを読み込みます。

今回は上記で作ったデータを読み込みます。

  • ベースクラス名 ARM
  • クラス名 Level1,Level2
  • フィールド1 String型 WEP
  • フィールド2 String型 PRO

スクリプトからの読み込みは初期化し、クラス指定で取得できるので使いやすいです。



サンプルコード(Inputfieldで読み取り、データ更新、データ読み込み、表示)

using UnityEngine;
using UnityEngine.UI;

//GDE
using GameDataEditor;

public class WButton : MonoBehaviour {

    public Text Weptext;
    public Text Protext;
    public InputField Wepinput;
    public InputField Proinput;

    //
 // GDE Write Data
 //
 public void WriteData()
    {
        //GDE初期化
        GDEDataManager.Init("gde_data");

        //GDE Class 指定取得
        GDEARMData arm = new GDEARMData(GDEItemKeys.ARM_Level1);

        //Data Edit
        arm.WEP = Wepinput.text;
        arm.PRO = Proinput.text;

        //データ保存
        GDEDataManager.Save();

        //GDE Class 指定取得
        GDEARMData arm = new GDEARMData(GDEItemKeys.ARM_Level1);

        //GDE Class ランダム取得
        //GDEARMData arm = GDEDataManager.GetRandom();

        //GDE Class ALL取得
        //List armlist = GDEDataManager.GetAllItems();

        //GDE class list表示
        //Weptext.text = armlist[1].WEP;
        //Protext.text = armlist[1].PRO;

        //GDE class 表示
        Weptext.text = arm.WEP;
        Protext.text = arm.PRO;
   }
}

ソースの説明
  • GDE用の設定
    using GameDataEditor;

  • GDE初期化
    GDEDataManager.Init("gde_data");
    ※ gde_dataはGDEがアプリ側に作っているデータ構造です。

  • ARM型のLevel1を指定して取得
    GDEARMData buso = new GDEARMData(GDEItemKeys.ARM_Level1);

  • ARM型のデータをランダム取得
    GDEARMData buso = GDEDataManager.GetRandom();

  • ARM型の全取得
    List armlist = GDEDataManager.GetAllItems();

  • データ書き込み
    
    //GDE Class 指定取得
    GDEARMData buso = new GDEARMData(GDEItemKeys.ARM_Level1);
    
    //Data Edit
    buso.WEP = "くさりがま";
    buso.PRO = "しんしのふく";
    
    //データ保存
    GDEDataManager.Save();
    




おわりに

GameDataEditorを利用することでGoogleスプレットを利用してアプリのデータ管理がスムーズにできるようになりました。
データベースを使うまでではない、データ管理はプログラマから離したい等、便利なアセットかと思います。