Unity Easy Save 教學

CG 數位學習網 > Unity Easy Save 教學

 


使用 PHP 網頁與 MySQL 資料庫儲存與載入資料

Easy Save 支援透過 PHP 動態網頁將遊戲存檔上傳到 MySQL 資料庫,或是下載儲存的資料來載入遊戲進度。

因此玩家即使在不同的電腦或行動裝置玩遊戲,也可以載入儲存的遊戲資料。本教學使用 XAMPP 來做說明。

XAMPP 官方網站:https://www.apachefriends.org

首先將 XAMPP 下載安裝到您的電腦,請記住 XAMPP 的安裝路徑,稍後設置 Easy Save 3 Cloud 將需要使用。

透過 XAMPP 控制面板啟用 Apache 伺服器及 MySQL 資料庫。

 

開啟網頁瀏覽器,網址列輸入 http://localhost 或 http://127.0.0.1 顯示 XAMPP 預設網頁,代表網站伺服器已經架設完成。

 

回到 Unity 編輯器進入 [ Assets > Plugins > Easy Save 3 > Web ] 資料夾,按下滑鼠右鍵執行Show in Explorer 即可開啟檔案位置,您可以在 Web 資料夾找到 ES3Cloud.php 檔案,將它複製到 XAMPP 安裝路徑下的 htdocs 資料夾。

 

網頁瀏覽器網址列輸入 localhost/phpmyadmin 進入資料庫管理系統,需要新增一個 Easy Save 使用的資料庫,按下左側的「新增」。

 

如果使用資料庫位置是使用 localhost 則只能使用最高權限 Root 來完成設定,無法使用新建立的其他帳號。

您可以建立一個權限較低的帳號,減少被盜用或刪除檔案的風險,但這部份不在此教學討論的範圍

如果需要使用其他使用者帳號則須在資料庫位置中輸入本機 IP 才可以將 Easy Save Cloud設定完成。

查詢 IP 的方法是 [ 開始 > 執行 > 輸入 Cmd > 輸入 ipconfig ] 即可顯示電腦使用的 IP 位址。

 

網頁左側顯示 es3 代表資料庫建立完成,目前暫時不需要建立資料表。

 

資料庫建立完成後,網址列輸入 http://localhost/ES3Cloud.php 後進入 Easy Save 3 Cloud 設定,輸入資料庫位置、帳號和密碼與剛才建立的 es3 資料庫名稱,按下 Install ES3Cloud 即可完成設定。

 

此時重新整理 ES3Cloud.php 網頁將會出現錯錯誤訊息,請不必緊張因為 ES3 的功能已經可以正常使用。

 

接著再回到 Unity 編輯器,新增一個 C# 腳本命名為 RemoteSave 並開啟。
我們先公開宣告一些變數,和先前儲存玩家狀態的變數一樣。
宣告一個變數 api 並將先前安將 ES3 Cloud 產生的 API Key 設定為預設值。

 

建立一個協程,使用 ES3Cloud.UploadFile 方法來上傳檔案。

關於 ES3Cloud.UploadFile 介紹 https://docs.moodkie.com/easy-save-3/es3-api/es3-methods/es3cloud-uploadfile/

ES3Cloud.UploadFile 有兩種寫法, 第一種寫法是可以讓特定使用者進行上傳檔案功能。

ES3Cloud.UploadFile ( "檔案名稱" , "使用者帳號" , "使用者密碼" )

第二種寫法是可以讓任何使用者皆可上傳檔案。

ES3Cloud.UploadFile('檔案名稱")

這裡使用第二種寫法來做範例,協程無法使用按鈕來觸發,必須先建立一個方法調用協程,

此處是將 SaveData.es3 檔案上傳到 MySQL 資料庫,並回報是否有錯誤或是上傳成功!

接著是從資料庫下載檔案,使用 ES3Cloud.DownloadFile("檔案名稱") 方法來下載檔案。

關於 ES3Cloud.DownloadFile 介紹 https://docs.moodkie.com/easy-save-3/es3-api/es3-methods/es3cloud-downloadfile/

與 ES3Cloud.UploadFile 相同,可以選擇兩種寫法,此處也是使用第二種寫法。

 

★ RemoteSave ★

580px ( 580-430=150) / 280px

 

開啟 Unity 編輯器,將 RemoteSave 與 RemoteLoad 腳本附加在 GameManager 物件。

 

將上傳與下載的方法附加在「備份到伺服器」與「從伺服器還原」按鈕的 On Click 事件。

按下 Play 測試遊戲,按下「備份到伺服器」與「從伺服器還原」確認執行後出現成功訊息。

 

透過網頁瀏覽器 phpmyadmin 開啟 es3 資料庫的 es3cloud 資料表,即可看到上傳的 Savedata.es3 檔案。

 

回到 Unity 編輯器並開啟 Easy Save 3 設定面板,透過 Tools 分頁的 Clear Persistent Data Path 按鈕刪除本機儲存的檔案。

按下 Play 測試遊戲,並按下「從本機讀取檔案」按鈕,將會出現有找不到檔案的錯誤訊息。

 

按下「從資料庫下載檔案」按鈕後,再按下「從本機讀取檔案」按鈕,會發現成功找回先前儲存的檔案了。

假使有到儲存檔案位置的資料夾時會發現原本是空的資料夾中,會多出 Savedata.es3 檔案,表示檔案從資料庫抓取成功了。

 

修改儲存的檔名並上傳到資料庫

目前完成的功能是將 Savedata.es3上傳到資料庫,但若多個玩家進行上傳檔案的話,將則會導致檔案被覆蓋的問題,這部份可以透過使用不同檔名儲存的方式來解決。開啟 LocalSave 腳本,對本機儲存與讀取的方法進行修改。

這裡使用 playerName 變數來做為檔案名稱,因此不需要重覆儲存玩家名稱,先將在 SaveLocalFile ( ) 方法內的儲存與讀取的playerName 變數刪除。

除了使用玩家名稱的方式以外,也可以使用玩家編號、玩家帳號等的變數型態來儲存檔案。這部份稍後您可以自行嘗試。

找到 SaveLocalFile 方法,可以使用 ES3.CopyFile 或是 ES3.RenameFile 將檔案更改為適當的名稱,選擇其中一種方式即可。

使用 ES3.CopyFile 可以拷貝檔案並重新命名。

使用 ES3.RenameFile 可單純將檔案重新命名。

 

讀取的操作也需要改為使用檔案名稱,透過 Easy Save 3 設定面板可以設定預設名稱,但並不支援使用變數。

找到 LoadLocalFile ( ) 讀取方法後,將取得玩家名稱的方法放在上面,並將 ES3.Load 更改為 ES3File.Load 類別。

不過 ES3File 是靜態屬性,需要指定參照的對象,宣告 ES3File file = new ES3File(playerName + ".es3") 才可以使用。

 

上傳到資料庫的 Coroutine 也需要跟著修改,只需將ES3Cloud.UploadFile(playerName".es3");的檔案名稱修改為對應的檔案名稱。

 

下載檔案的 Coroutine 也需要將 ES3Cloud.DownloadFile(playerName"es3") 修改為對應的檔案名稱。

 

TOP