UnityでGoogleスプレッドシートを読み込む基本|ビルドし直さずにデータを更新する方法
前回の記事では、Unityの Resources.Load() を使って、Textデータを読み込む方法を紹介しました。
ResourcesフォルダにTextファイルやCSVファイルを入れておくと、Unity内でそのデータを読み込み、リストや配列として使うことができます。
ただし、この方法にはひとつ注意点があります。
それは、データを変更したい場合、基本的にはUnity側のデータを修正して、もう一度ビルドする必要があるという点です。
たとえば、クイズアプリを作っていて、
問題文を変更したい
選択肢を追加したい
答えを修正したい
時事問題を新しくしたい
という場合、Resourcesフォルダ内のTextデータを修正し、アプリを再ビルドする必要があります。
そこで今回は、Resourcesフォルダではなく、GoogleスプレッドシートからTextデータを読み込む方法を紹介します。
Googleスプレッドシートを使うと、アプリをビルドし直さなくても、スプレッドシート側の内容を更新するだけで、Unity側で読み込むデータを変更できるようになります。
特に、クイズ問題やお知らせ機能、イベント情報、時事問題など、あとから内容を変更したいデータと相性が良い方法です。
事例1:クイズの設問と答え
Googleスプレッドシートは、クイズアプリと相性が良いです。
たとえば、次のようなクイズデータをGoogleスプレッドシートで管理できます。

このように表で管理しておけば、
0列目:問題
1列目:正解
2列目:ダミー1
3列目:ダミー2
4列目:ダミー3のように、Unity側で扱うことができます。
特に時事問題の場合、内容が変わるたびにアプリを更新するのは大変です。
しかし、Googleスプレッドシートからデータを読み込む形にしておけば、スプレッドシート側を書き換えるだけで、新しい問題に差し替えることができます。
Googleスプレッドシート
Googleスプレッドシートを作成する
まず、Googleスプレッドシートを開いて、次のような表を作ります。

1行目は見出しです。
2行目以降に、実際のデータを入力します。
シート名を「Quizデータ」にしておきます(任意で指定してください)
今回は例としてクイズデータにしていますが、他にも、
お知らせ文
セリフデータ
ステージ情報
アイテム一覧
イベント情報などにも使えます。
GoogleスプレッドシートをWebに公開
次に、Unityから読み込めるように、GoogleスプレッドシートをWebに公開します。
手順は次の通りです。
1. Googleスプレッドシートを開く
2. 画面上部の「ファイル」⇒ 「共有」を選択 ⇒「ウェブに公開」を選択

3. 公開するシートを選ぶ
4. 形式を「カンマ区切り値(.csv)」にする
5. 「公開」をクリック、確認メッセージが出たら「OK」で公開

6. 表示されたURLをコピーする

Google公式ヘルプでも、Google Sheetsなどのファイルは「ファイル」→「共有」→「ウェブに公開」から公開できると案内されています。公開すると、設定によってはWeb上のユーザーが見られる状態になるため、個人情報や非公開情報を入れないように注意が必要です。
「共有」と「ウェブに公開」の違い
ここで少し注意です。
Googleスプレッドシートには、
共有
ウェブに公開という似たような設定があります。
共有
「共有」は、特定の人にスプレッドシートを見せたり、編集してもらったりするための設定です。
たとえば、
この人だけ閲覧できる
この人だけ編集できる
リンクを知っている人だけ閲覧できるというような設定です。
ウェブに公開
一方、「ウェブに公開」は、スプレッドシートの内容をWeb上に公開するための設定です。
UnityからCSVとして読み込む場合は、基本的にこちらを使います。
ただし、公開したデータは、URLを知っている人から見られる可能性があります。
そのため、次のような情報は入れないようにしましょう。
パスワード
個人情報
住所・電話番号
メールアドレス
非公開の業務データ
見られて困る答えや内部データ
Unityのプログラム
オブジェクト類の準備
次に、Unity側の準備をします。
まず、空のGameObjectを作成します。
1. Hierarchyで右クリック
2. Create Emptyを選択
3. 名前を GoogleSheetReader に変更
次に、スクリプトファイル「GoogleSheetReader」を作成します。

Googleスプレッドシートを読み込む基本コード
今回は、まずGoogleスプレッドシートの中身を取得して、Consoleに表示するだけのシンプルなコードにします。
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class GoogleSheetReader : MonoBehaviour
{
[SerializeField] string url; // Gpple Sheetsの公開URLをInspectorで設定
void Start()
{
StartCoroutine(ReadSheet());
}
IEnumerator ReadSheet()
{
UnityWebRequest request = UnityWebRequest.Get(url); // URLからデータを取得するリクエストを作成
yield return request.SendWebRequest(); // リクエストの送信と完了まで待機
if (request.result == UnityWebRequest.Result.Success) // リクエストが成功した場合
{
Debug.Log(request.downloadHandler.text); // 取得したデータをログに出力
}
else // リクエストが失敗した場合
{
Debug.LogError(request.error); // エラーが発生した場合はエラーメッセージをログに出力
}
}
}このスクリプトを、先ほど作成した GoogleSheetReader オブジェクトにアタッチします。
Inspectorに Url という入力欄が表示されるので、Googleスプレッドシートから取得したCSVのURLを貼り付けます。

Unityで再生して、Consoleにスプレッドシートの内容が表示されれば成功です。

UnityのConsoleでは、複数行のCSVをDebug.Logで表示した場合、一覧には先頭行だけが表示されることがあります。
その場合は、Consoleのログをクリックして、下側の詳細表示を確認してください。
詳細表示に2行目以降のデータも表示されていれば、Googleスプレッドシートの読み込みは成功しています。
Unityの UnityWebRequest.Get は、指定したURLからテキストやバイナリなどのシンプルなデータを取得するために使えるメソッドです。今回のようにCSVのURLから文字列を取得する用途にも使えます。
コードの簡単な解説
UnityWebRequest.Get(url)
UnityWebRequest request = UnityWebRequest.Get(url);この部分で、指定したURLにアクセスする準備をしています。
今回は、GoogleスプレッドシートをCSVとして公開したURLを指定します。
yield return request.SendWebRequest();
yield return request.SendWebRequest();ここで実際に通信を行います。
インターネットからデータを取得する処理は、すぐに終わるとは限りません。
そのため、コルーチンを使って、読み込みが終わるまで待っています。
request.downloadHandler.text
Debug.Log(request.downloadHandler.text);読み込みに成功すると、取得したCSVデータを文字列として受け取ることができます。
今回は、その文字列をConsoleに表示しています。
配列の作成
続いて読み込んだデータを string型の配列に格納するコードを追加します。先に作ったコードもあるので、重複しないように気を付けてください。
public class GoogleSheetReader : MonoBehaviour
{
[SerializeField] string url; // Google Sheetsの公開URLをInspectorで設定
string[,] quizArray; // タイトル行を除いたクイズデータを入れる2次元配列
void Start()
{
StartCoroutine(ReadSheet());
}
IEnumerator ReadSheet()
{
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string text = request.downloadHandler.text;
// 改行ごとに分ける
string[] rows = text.Split('\n');
// 1行目のタイトル行を除いた行数
int rowCount = rows.Length - 1;
// 1行目をカンマで分けて、列数を取得
int columnCount = rows[0].Trim().Split(',').Length;
// 2次元配列を作成
quizArray = new string[rowCount, columnCount];
// 2行目以降を2次元配列に入れる
for (int i = 1; i < rows.Length; i++)
{
string[] columns = rows[i].Trim().Split(',');
for (int j = 0; j < columnCount; j++)
{
quizArray[i - 1, j] = columns[j];
}
}
Debug.Log("クイズデータを2次元配列に格納しました");
// 確認用
Debug.Log(quizArray[0, 0]); // 日本の首都は?
Debug.Log(quizArray[0, 1]); // 東京
}
else
{
Debug.LogError(request.error);
}
}
}ポイントはここです。
string[,] quizArray;これで2次元配列になります。
そして、
quizArray = new string[rowCount, columnCount];で、
何行分あるか
何列分あるかを指定して配列を作っています。
今回なら、見出しを除いて3問、列は5列なので、
quizArray = new string[3, 5];というイメージです。
次に、
quizArray[i - 1, j] = columns[j];ここで各セルのデータを入れています。
i はCSV全体の行番号です。
ただし、1行目のタイトル行を飛ばしているので、quizArray に入れるときは i - 1 にします。
rows[1] → quizArray[0, 0〜4]
rows[2] → quizArray[1, 0〜4]
rows[3] → quizArray[2, 0〜4]という対応です。
このあたりは、前回紹介したTextデータを配列やリストにする考え方と同じです。
Googleスプレッドシートを使うときの注意点
Googleスプレッドシートからデータを読み込む方法は便利ですが、いくつか注意点もあります。
インターネット接続が必要
Googleスプレッドシートはインターネット上のデータです。
そのため、アプリを使う端末がインターネットに接続されていない場合、データを取得できません。
完全にオフラインで使うアプリの場合は、Resourcesフォルダにデータを入れておく方法の方が向いています。
公開してよいデータだけを使う
CSVとして公開したGoogleスプレッドシートは、URLを知っている人が見られる可能性があります。
そのため、個人情報やパスワードなど、見られて困るデータは入れないようにしましょう。
クイズ問題、お知らせ文、イベント情報など、公開されても問題ないデータに使うのがおすすめです。
カンマを含む文章に注意
CSVは、カンマで列を分ける形式です。
そのため、セルの中にカンマが入っていると、単純な分割ではうまく扱えない場合があります。
初心者向けには、まずはセルの中にカンマを入れないようにしておくと安全です。
本格的に使う場合は、CSVを正しく解析する処理や、JSON形式での管理も検討するとよいと思います。
反映までの時間
Googleスプレッドシートを更新しても、環境によってはUnity側にすぐ反映されない場合があります。
その場合は、
少し時間を置く
Unityを再生し直す
URLが正しいか確認する
公開設定が有効か確認する
といった点を確認してみてください。
Resources.Loadとの使い分け
最後に、Resources.LoadとGoogleスプレッドシートの使い分けを整理しておきます。
Resources.Loadが向いているケース
アプリ内に固定データとして入れておきたい
オフラインでも使いたい
データを頻繁に変更しない
画像や音声、プレハブなどを読み込みたい
Googleスプレッドシートが向いているケース
あとからデータを変更したい
ビルドし直さずに内容を更新したい
クイズ問題を追加したい
時事問題を扱いたい
お知らせ文を更新したい
季節イベントの内容を変更したい
固定データはResources、あとから更新したいデータはGoogleスプレッドシート、という考え方をするとわかりやすいです。
まとめ
今回は、UnityでGoogleスプレッドシートのデータを読み込む基本的な方法を紹介しました。
前回のResources.Loadでは、Unity内にあるTextデータを読み込みました。
今回は、Googleスプレッドシートにある外部データを読み込みました。
Googleスプレッドシートを使う大きなメリットは、アプリをビルドし直さなくても、データを更新できることです。
特に、
クイズ問題
時事問題
お知らせ
イベント情報
セリフデータ
ステージ情報
のように、あとから内容を変更したいデータと相性が良い方法です。
▼ Unity初心者向け記事まとめはこちら
こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

さらにステップアップの「スマホで遊ぶジャンプゲーム 8回セット」のマガジンもぜひご活用ください。

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!