Edited at

Airtableでマスターデータを作ってUnityから読む


Airtable

ゲームのマスターデータ、何のツールで管理してますか?

Excel? GoogleSpreadsheet?

Airtableっていうめっちゃ便利なサービスがあります。


マスターデータを作る

さっそくマスターデータを作ります。

「この列は数字だけ!」とかの制約がかけれたり、Filterがかけれたりしてめっちゃ便利!っていうかDBです。

Screen Shot 2019-07-08 at 15.50.24.png


Unityから読む

めっちゃ分かりやすいAPIドキュメントがあります。

ApiKeyとBase(ドキュメントのID的なもの)もここから見れます。

https://airtable.com/api

本家.netクライアント : ngocnicholas/airtable.net

をクローンしてちょっといじったやつ : kyubuns/airtable.net

今回はちょっといじったやつ前提で書きます。

AirtableApiClientディレクトリ以下をUnityに突っ込んで、Json.netもどこかから調達してきてください。

HttpUtility.UrlEncodeが無い!って言われたときは、この記事の一番下を見てください。

あとはこれだけでデータが取れます。

using (var table = new AirtableBase(ApiKey, Base))

{
var response = await table.ListRecords<Player>("Player");
foreach (var r in response.Records)
{
var player = r.Fields;
Debug.Log($"{player.Lv} - {player.HP}");
}
}

public class Player
{
public int Lv;
public int HP;
}

1回の呼び出しにつき100行までしか取ってこれないので、1テーブルが100行以上になりえるときはこんな感じ。

string offset = null;

do
{
var response = await table.ListRecords<Player>("Player");
if (!response.Success) break;
foreach (var r in response.Records)
{
var player = r.Fields;
Debug.Log($"{player.Lv} - {player.HP}");
}
} while (offset != null);


注意点


The API is limited to 5 requests per second.


1秒間に5リクエストで制限かかるので、ユーザーが直接読むのには向いてなさそうです。

この制約がキツい場合はお問い合わせくださいって書いてあるので、有料プランだときっと上がるんでしょう。きっと。


おまけ

HttpUtility.UrlEncodeが無い時用。

using System;

namespace AirtableApiClient
{
public static class HttpUtility
{
public static string UrlEncode(string stringToEscape)
{
return Uri.EscapeDataString(stringToEscape);
}
}
}