Skip to content

chinpanGX/MasterSheetz

Repository files navigation

MasterSheetz

license

概要

マスタデータの定義 -> Unityに組み込む -> ランタイムで利用するまでのフローを高速に、簡単に行うことを目指したマスターデータの基盤システムです。

入力したデータの変換をするGoogleSpreadSheetのスクリプト、マスタデータの利用するUnity用のパッケージを提供しています。

マスタデータでサポートしている型は、int, string, boolの3つの型です。

GoogleSpreadSheetについて

AppScriptsのセットアップ

1.拡張機能 > AppScript から、make.gs make_dialog.htmlの、2ファイルを作成します。

alt text alt text

2.作成したスクリプトファイルにコードをコピーする

GoogleSpreadSheetAppScripts に配置されているファイルの中身を作成したAppScriptsのmake.gs/make_dialog.htmlにコピーし、保存をします。

スプレッドシートのメニューに"make"が追加されていることを確認してください。 alt text

3.認証をする

初回のみ実行する際に、スクリプトを実行を許可するための認証をする必要があります。 "make"を実行すると、認証が必要ですというダイアログが表示されるので、"OK"をクリックします。

alt text

以下の手順で進んでください。

  1. Googleにログイン
  2. 詳細をクリック
  3. make(安全ではないページ)をクリック
  4. "make が Google アカウントへのアクセスを求めています"という内容のダイアログが表示されます。
  5. "すべて選択"にチェック
  6. 続行をクリック
  7. "マスタデータをダウンロード"というダイアログが表示される

alt text

データ入力について

  1. 1行目は "カラムに対してのコメント" を記載できます。makeをする際に無視されます。
  2. 2行目は, カラムの型 を入力してください。サポートしている型は、int, string, boolの3つの型です。
  3. 3行目は、カラム名 を入力してください。
  4. 4行目以降は、データを追加してください。

Note

"ignore" のカラムをを追加すると、"データに対してのコメント" を記載できます。makeをする際に無視されます。

マスタデータのサンプル

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}]}

C# MakeFile

UnityでマスタデータのC#クラスを自動生成する際に利用するJSONファイルです。

以下は、JSONの中身です。

{
	"className": "SampleCharacter",
	"types": [
		"int",
		"string",
		"int",
		"bool"
	],
	"columns": [
		"id",
		"name",
		"type",
		"playable"
	]
}

Test用のJSON

入力されたデータの確認ができます。

以下は、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
		}
	]
}

Unity

セットアップ

※ "Addressables" と "UniTask" の導入が必須です。

PackageManager > Add package from git URL...から追加

https://github.com/chinpanGX/MasterSheetz.git?path=MasterSheetsUnityProject/Assets/MasterSheetz

エディタメニュー

MenuItemの __Developmet Tools > MasterData__から実行できます。

alt text

GoogleDriveの設定

Config > Create GoogleDriveLinkAsset GoogleDriveLinkAssetを作成します。

Config > Select ProjectWindow GoogleSpreadSheetAsset ProjectWindowでGoogleDriveLinkAsset選択状態にします。

alt text

Open Link GoogleDrive から, 上記のアセットに設定したURLへ飛ぶことができます。

自動生成するマスタデータのC#クラスの設定

Config > Create CSharpGenerateConfigAsset CSharpGenerateConfigAssetを作成します。

Config > Select ProjectWindow CSharpGenerateConfigAsset ProjectWindowでCSharpGenerateConfigAsset選択状態にします。

CSharpGenerateConfigAssetには、以下の内容を設定します。 alt text フォルダのパスはAssetsから指定をしてください。

Generate MasterData C# Classes を実行すると、 OutputFolderPath内にC#クラスを生成します。

Caution

実行する際に、すでに存在するファイルをすべて削除したうえで、Jsonの定義に基づいて再生成します。 OutputFolderPath以下には、手動で追加したファイルを追加しないようにしてください。

ロード処理

IMasterDataLoaderMasterDataTextAssetLoaderBaseを、継承したクラスを実装してください。

以下は、サンプルです。

// マスタデータの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ライセンスで公開しています。

https://github.com/chinpanGX/MasterSheetz/blob/main/LICENSE

About

マスターデータの基盤システム

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published