Unity JSON 教學

Unity 提供儲存或讀取 JSON 檔案的功能,可用於儲存簡單的資訊,例如玩家名稱、等級、金錢等。

相關連結 [ 維基百科 | Unity 官方網站 ]

首先在 Unity 建立一個 StreamingAssets 資料夾。

StreamingAssets 官方網站介紹 [ 連結 ]

簡單的說,此資料夾在匯出成執行檔時將不會進行壓縮,適合用於存放文字檔。

注意:在行動裝置中,這個資料夾中的檔案可以讀取,但不能進行寫入的動作。

首先先建立場景,此處使用內建的第三人稱控制器,再建立一個地板來做示範:

 

製作兩個 UI 按鈕,分別為儲存與讀取。



新增 C# 腳本 (PlayerStatus) 此教學範僅儲存遊戲中常見的玩家狀態。

完成並儲存,回到 Unity 編輯器中進行數值編輯。

編輯完成後,再新增一個腳本,名為 SaveFile 並開啟,此腳本是要儲存檔案用。

JSON 的儲存,是將資訊儲存在類別中,再將整個類別寫入到 JSON 檔案中。

此處會使用到儲存的指令,需要使用 System.IO 的庫。

using System.IO;

此處新增了一個類別,名稱為 SavePlayerStatus 後,並在此類別中放入需要儲存的資訊。

注意:類別上方需加入 [ System.Serializable ] 序列化才可以被儲存,否則儲存檔案將是空白的。

而在宣告 SavePlayerStatus 類別時,也必須使用 public 進行宣告,否則無法將角色資訊放入 SavePlayerStatus 類別中。

因為要得到玩家的位置、狀態腳本,所以也需宣告玩家角色。

而 PlayerName 是指玩家名稱,此處用於儲存成 JSON 檔案時需要用到的檔名。

字串 saveJson 是指在儲存 JSON 檔案時的內容,會將 SavePlayerStatus 類別轉換成文字後,方便儲存。

字串 path 是指檔案路徑。

宣告完成後,再建立一個方法,命名為 SaveStatus 用來將玩家現在的數值放到 SavePlayerStatus 類別中,並將此類別轉換成JSON格式並儲存到指定路徑中。

path 變數放入 Application.dataPath + "/ StreamingAssets / " + playerName + ".json" 作為儲存檔案的路徑。

將類別轉成 JSON 檔案的方法,需使用 Unity 內建的方法, JsonUtility.ToJson ( 類別名稱 , 是否轉換成JSON格式); ,
將類別變更為字串後,然後使用 WriteAllText(路徑 , 儲存的字串) ,將 JSON 檔案存到設定的路徑中。

將轉換後的字串放入 saveJson 變數後,再儲存此文字到路徑中。

Application.dataPath 官方網站介紹:https://docs.unity3d.com/ScriptReference/Application-dataPath.html

Application.dataPath 來取得目前專案資料夾的位置。

接下來是讀取的方法讀取檔案後直接將數值套用至玩家角色身上。

建立 C# 腳本,並命名為 LoadFile 後並開啟。

此處也會使用讀取檔案的指令,須先引用 System.IO 的庫。

先宣告 LoadPlayerStatus 類別並放入要讀取的數值。

其餘的宣告與儲存相似,不過因為是讀取的方法,所以將 saveJson 變數名稱變更為 load 變數。

再建立一個讀取方法,先取得玩家角色的物件後,再取得玩家角色的名字。

使用 File.ReadAllText(路徑) 指令來取得檔案的內容,並放入 load 變數中。

使用 JsonUtility.FromJson<類別名稱>(檔案內容的變數) 指令,將轉換後的 JSON 檔案轉成類別。

loadplayerstatus = JsonUtility.FromJson<LoadPlayerStatus>(load);

最後將 LoadPlayerStatus 類別中的數值,直接放入玩家角色的狀態腳本以及位置。

將腳本儲存後,回到 Unity 編輯器,新增一個空物件命名為 GameManager 後,將 SaveFile 與 LoadFile 腳本拖曳到此物件上。

完成後將儲存與讀取的按鈕增加事件後,按下 Play 測試。

按下儲存按鈕後即可成功儲存玩家角色的數值、位置。

按下讀取按鈕後即可將先前儲存的玩家角色資訊再放入玩家角色身上。

而檔案在專案資料夾下的 [Asset > StreamingAssets ] 資料夾中,發布之後會在 [專案名稱_Data > StreamingAssets ] 資料夾中。儲存的 JSON檔案開啟後會是這個樣子的。

 

Console 視窗顯示的訊息。

專案檔下載 UnityJson.unitypackage