
【Unity】Googleスプレッドシートから簡易的に値を取得する
はじめに
Unityでゲームを作っていると、ゲーム内のデータや設定を外部から管理したい場合があります。そんな時に便利なのが、Googleスプレッドシートとの連携です。Googleスプレッドシートを使えば、Excelのような感覚でデータを作成・編集でき、Unityからそのデータを読み込むことができます。
この記事では、GoogleスプレッドシートからUnityにデータを簡単に取得する方法について解説します。
手順1:GoogleスプレッドシートのリクエストURL生成
GoogleスプレッドシートのURLからCSVデータを直接取得するためのURLは以下の形式になります。
https://docs.google.com/spreadsheets/d/シートID/gviz/tq?tqx=out:csv&sheet=シート名
シートID: スプレッドシートのURLから取得できる、スプレッドシートを一意に識別するIDです。
「https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmno/edit?gid=0」というURLがあった場合太字の部分がシートIDになります。
注意:該当シートは共有設定で「リンクを知っている全員」などの公開設定を行う必要がありますシート名: データを取得したいシートの名前です。
実際のリクエストURL例:
https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmno/gviz/tq?tqx=out:csv&sheet=Sheet1
このURLにアクセスすると、Sheet1シートのデータがCSV形式でダウンロードされます。
手順2:UnityでCSVデータを解析する
Unityで上記URLからCSVデータをダウンロードし、パースする具体的なコード例を以下に示します。
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Text;
using System.Collections.Generic;
public class GetDataFromGoogleSheet : MonoBehaviour
{
[SerializeField] private string googleSheetUrl = "https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmno/gviz/tq?tqx=out:csv&sheet=Sheet1";
private void Start()
{
StartCoroutine(GetData());
}
private IEnumerator GetData()
{
UnityWebRequest request = UnityWebRequest.Get(googleSheetUrl);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
// CSVデータをパースする
string csvData = request.downloadHandler.text;
string[] lines = csvData.Split('\n');
// CSVデータを2次元配列に変換(例)
List<string[]> dataList = new List<string[]>();
foreach (string line in lines)
{
string[] values = line.Split(',');
dataList.Add(values);
}
// 取得したデータをゲームオブジェクトに反映する
// ...
}
else
{
Debug.LogError("Error: " + request.error);
}
}
}
手順3:完了
自身のプロジェクトに合わせて反映処理を実装する。
この実装のメリットとデメリット
メリット:とにかく実装が簡単、小難しい設定がいらない。
該当のスプレッドシートと受け取るプロジェクト側を設定するのみで完結するので直感的で分かりやすいです。
デメリット:データの内容によっては欠落するケースがある
筆者の環境の不具合かもしれないですが、「Int32」「String」などプログラムの型名などが受信時に消えてしまう問題が起きました。
行の先頭に該当のワードがある時のみなのでレアケースですが、注意が必要です。
このケースでスプレッドシートを参照したい場合はSheet APIなどが必要になると思います。