Unity Google Sheets 教學

使用 Unity 製作遊戲可選擇多種方式儲存資料,例如透過 PHP 網頁與 MySQL 資料庫連結,然而架設網站需要額外技術與成本,因此使用免費的 Google Sheets 試算表資料儲存,對於無法自行架站的前提而言是一個不錯的選擇。這次的 Unity GAS 教學分享如何透過 Google Apps Script 儲存資料到 Google Sheets 試算表。

Google Apps Scrip 開發者網站 [ 連結 ]

首先建立新的 Google Sheets 試算表。

建立 Google 試算表將有唯一的 ID ,參考下圖從瀏覽器的網址將「斜線」之間的 ID 複製到剪貼簿。

預設名稱為「無標題的試算表」使用滑鼠雙擊可修改試算表名稱。

稍後將使用 Google Sheets 儲存玩家的資料,包括帳號與密碼,提供玩家登入與儲存資料的功能。

 

設定 Unity 與 Google Sheets 的連線

執行 [ 工具 > 指令碼編輯器 ] 可編輯程式碼編輯器。

預設的程式碼只有 myFunction ( ) 函式。

修改 myFunction ( ) 函式,宣告 app 與 sheet 變數,用於輸入連結的試算表與與工作表。

先測試基本的寫入資料功能,注意!ID 與工作表的名稱必須完全符合才能連結!

初次執行時將會出現帳號授權的要求,必須核對權限才能進行後續的操作。

使用 Google 帳戶登入,然後按下「進階」連結。

網站將詢問您是否允許進行查看、編輯、建立、刪除 Google Sheets 試算表,按下「允許」。

選擇「部署為網頁應用程式」。

執行後回到試算表確認資料是否已寫入指定儲存格。

進行下一項測試,修改程式碼使用 sheet.appendRow 在工作表的最後增加一列記錄。

回到 Google 試算表,確認是否已新增一筆資料。

 

基本功能測試!在 Google Sheets 建立一個函式,從 Unity 呼叫此函式,並抓取回傳的資料。

function doPost(e){
return ContentService.createTextOutput("OK!");
}

回到 Unity 建立一個 C# 腳本並命名為「GoogleSheets.cs」,程式碼如下:

新增一個按鈕,當使用者按下此按鈕時觸發事件,執行協程以 Post 方式傳送一個空表單到指定網頁。

注意!以上截圖的 url 是經過修改的縮簡網址,請複製貼上您的 Google Sheets 網址以便正常連結。

按下 Play 測試遊戲,如果 Console 視窗出現 OK! 訊息,表示 Unity 與 Google Sheets 成功連結。

 

讀取資料

建立一個工作表,記錄所有的學校代碼,這個設計是讓學生從下拉式選單選擇就讀的學校

透過製作此功能學習如何讀取 Google Sheets 資料,並顯示於畫面。

建立一個 SchoolList 工作表,建立一些記錄(學校名稱、學校代碼、終端字元)。

進入 Google Sheets 編輯器,修改程式碼:

function doPost(e){

var p = e.parameter;

var app = SpreadsheetApp.openById("xxxxxxxxxxxxx");

 

if(p.method == "getSchoolList"){

var workSheet = p.workSheet;

var sheet = app.getSheetByName(workSheet);

...

}

以上這段程式的功能是讓 Unity C# 執行 UnityWebRequest.Post 時讀取工作表並回傳指定的資料。

所以,再回到 Unity 並開啟 GoogleSheetsMain.cs 腳本,修改程式碼:

void start(){

IEnumerator GetSchoolListCoroutine(){

allSchoolList.Clear();

WWWForm form = new WWWForm();

form.AddField("method", "getSchoolList");

form.AddField("workSheet", schoolList_SheetName);

......

}

以上這段程式的功能在遊戲開始透過 UnityWebRequest.Post 讀取工作表並回傳指定的資料。

 

製作後台管理介面

系統管理者 - 可以建立學校資料,直接到 Google Sheets 建立資料,不特別製作管理介面。

學校管理者 -

製作管理用的後台管理介面,學校管理者登入後可以建立學生的資料。

 

UI 下拉式選單

執行 [ GameObject > UI > Panel ] 建立一個面板,因為稍後可以視需要控制顯示隱藏不同的面板。

選取剛建立的 Panel 面板,滑鼠右鍵執行 [ UI > Dropdown ] 建立下拉式選單並調整到適當大小。

展開 Dropdown 下的 Template 子物件,修改下拉式選單的外觀,包括項目圖示、字體的設定。

 

建立一個 C# 腳本並命名為 UIManager_Menu.cs 程式碼如下:

public GoogleSheetMain gas; ★ 注意 GoogleSheetMain 是剛才建立的第一個 C# 腳本名稱

public Dropdown dropdown_SchoolName;

public void OnGetSchoolList(string[] _schoolList){

foreach ( var list in _schoolList){

Dropdown.OptionData data = new Dropdown.OptionData(); 將讀取到的資料放入下拉式選單的 Options 選項之內。

data.text = list;

dropdown_SchoolName.option.Add(data);

......

}

}

 

 

使用先前建立的 Google Sheets 試算表,製作遊戲資料庫。

使用 getRange 設定儲存格,再使用 setValue 將數值存入儲存格。

執行程式碼後,切換到 Google Sheet 檢視結果。

先抓取指定儲存格的資料並放入變數 myValue ,再將此變數的內容使用 setValue 寫入指定儲存格。

執行程式碼後,切換到 Google Sheet 檢視結果。

宣告一個 data 變數陣列,再使用 sheet.appendRow 將變數寫入 Google Sheets 的最後一列。

執行程式碼後,切換到 Google Sheet 檢視結果。

使用 sheet.getLastRow ( ) 抓取最後一筆資料並寫入指定的位置。

執行程式碼後,切換到 Google Sheet 檢視結果,可以看到 A10 已顯示共有 5 筆資料,可用於顯示玩家、物品的總數量。

使用 sheet.getLastColumn ( ) 抓取最大欄數,並寫入指定的位置。

執行程式碼後,切換到 Google Sheet 檢視結果,可看到 A10 出現 8 ,代表工作表目前共有 8 欄的資料。

抓一筆完整的資料,再貼指定的列

執行程式碼後,切換到 Google Sheet 檢視結果。

使用 sheet.getLastRow ( ) 抓一整欄的資料。

執行程式碼後,切換到 Google Sheet 檢視結果。

使用 Utilities.formatDate ( ) 抓取日期時間,並寫入指定儲存格。

執行程式碼後,切換到 Google Sheet 檢視結果,確認指定儲存格出現日期與時間。

使用 searchColumn 搜尋資料,可用於搜尋玩家資料

執行程式碼後,切換到 Google Sheet 檢視結果。如果有搜尋到資料就寫入變數,若無則寫入 "沒有資料" 。

稍後會再介紹 Unity 與 Google Sheets 試算表的實務應用。