マスタデータの定義 -> Unityに組み込む -> ランタイムで利用するまでのフローを高速に、簡単に行うことを目指したマスターデータの基盤システムです。
入力したデータの変換をするGoogleSpreadSheetのスクリプト、マスタデータの利用するUnity用のパッケージを提供しています。
マスタデータでサポートしている型は、int, string, boolの3つの型です。
GoogleSpreadSheetAppScripts に配置されているファイルの中身を作成したAppScriptsのmake.gs/make_dialog.htmlにコピーし、保存をします。
スプレッドシートのメニューに"make"が追加されていることを確認してください。

初回のみ実行する際に、スクリプトを実行を許可するための認証をする必要があります。
"make"を実行すると、認証が必要ですというダイアログが表示されるので、"OK"をクリックします。
以下の手順で進んでください。
- Googleにログイン
- 詳細をクリック
- make(安全ではないページ)をクリック
- "make が Google アカウントへのアクセスを求めています"という内容のダイアログが表示されます。
- "すべて選択"にチェック
- 続行をクリック
- "マスタデータをダウンロード"というダイアログが表示される
- 1行目は "カラムに対してのコメント" を記載できます。makeをする際に無視されます。
- 2行目は, カラムの型 を入力してください。サポートしている型は、
int,string,boolの3つの型です。 - 3行目は、カラム名 を入力してください。
- 4行目以降は、データを追加してください。
Note
"ignore" のカラムをを追加すると、"データに対してのコメント" を記載できます。makeをする際に無視されます。
Unityにコピーして、ランタイムで利用するマスタデータが格納されたJsonファイルです。
以下は、JSONの中身です。
{"data":[{"id":1001,"name":"Pika","type":1,"playable":true},{"id":1002,"name":"Hito","type":2,"playable":false},{"id":1003,"name":"Dane","type":3,"playable":false}]}
UnityでマスタデータのC#クラスを自動生成する際に利用するJSONファイルです。
以下は、JSONの中身です。
{
"className": "SampleCharacter",
"types": [
"int",
"string",
"int",
"bool"
],
"columns": [
"id",
"name",
"type",
"playable"
]
}
入力されたデータの確認ができます。
以下は、JSONの中身です。
{
"className": "SampleCharacter",
"types": [
"int",
"string",
"int",
"bool"
],
"columns": [
"id",
"name",
"type",
"playable"
],
"data": [
{
"id": 1001,
"name": "Pika",
"type": 1,
"playable": true
},
{
"id": 1002,
"name": "Hito",
"type": 2,
"playable": false
},
{
"id": 1003,
"name": "Dane",
"type": 3,
"playable": false
}
]
}
※ "Addressables" と "UniTask" の導入が必須です。
PackageManager > Add package from git URL...から追加
https://github.com/chinpanGX/MasterSheetz.git?path=MasterSheetsUnityProject/Assets/MasterSheetz
MenuItemの __Developmet Tools > MasterData__から実行できます。
Config > Create GoogleDriveLinkAsset
GoogleDriveLinkAssetを作成します。
Config > Select ProjectWindow GoogleSpreadSheetAsset
ProjectWindowでGoogleDriveLinkAsset選択状態にします。
Open Link GoogleDrive から, 上記のアセットに設定したURLへ飛ぶことができます。
Config > Create CSharpGenerateConfigAsset
CSharpGenerateConfigAssetを作成します。
Config > Select ProjectWindow CSharpGenerateConfigAsset
ProjectWindowでCSharpGenerateConfigAsset選択状態にします。
CSharpGenerateConfigAssetには、以下の内容を設定します。
フォルダのパスはAssetsから指定をしてください。
Generate MasterData C# Classes を実行すると、 OutputFolderPath内にC#クラスを生成します。
Caution
実行する際に、すでに存在するファイルをすべて削除したうえで、Jsonの定義に基づいて再生成します。 OutputFolderPath以下には、手動で追加したファイルを追加しないようにしてください。
IMasterDataLoaderとMasterDataTextAssetLoaderBaseを、継承したクラスを実装してください。
以下は、サンプルです。
// マスタデータのJSONファイルは、"SampleCharacter"をキーにして、Addressablesに登録をしています。
public class MasterDataLoader : MasterDataTextAssetLoaderBase, IMasterDataLoader
{
public async UniTask<List<MasterDataTableBase>> LoadAll()
{
await UniTask.WhenAll(
LoadAndRegisterAsync<SampleCharacter>(nameof(SampleCharacter), data => new SampleCharacterMasterDataTable(data))
);
return Tables;
}
}
以下のようにリポジトリを生成をしてください。
var repository = new MasterDataRepository(new MasterDataLoader());
await repository.LoadAsync();
テーブルの取得はMasterDataRepositoryのGetTable()を利用してください。
テーブルからのデータ取得は、GetById(int id)、 GetAll()をMasterDataTableクラスが実装しています。
以下は、サンプルです。
var sampleCharacterTable = repository.GetTable<SampleCharacterMasterDataTable>();
var data = sampleCharacterTable.GetById(1001);
var dataList = sampleCharacterTable.GetAll();
Note
自動生成されるTableクラスはpartialになっているので、容易に拡張機能を実装することができます。
以下は、拡張機能のサンプルです。
// typeをEnumで取得する
public static class SampleCharacterExtension
{
public static SampleCharacterType GetType(this SampleCharacter character)
{
return (SampleCharacterType)character.Type;
}
}
// Enumにしたtypeから一致するデータのみ取得をする
public partial class SampleCharacterMasterDataTable : MasterDataTable<SampleCharacter>
{
public List<SampleCharacter> GetByType(SampleCharacterType type)
{
var data = GetAll();
return data.Where(x => x.Type == (int)type).ToList();
}
}
本ソフトウェアはMITライセンスで公開しています。





