Unity遊戲配置儲存方案

2021-09-12 20:21:54 字數 1560 閱讀 5308

配置檔案格式如下圖

第一行是列型別說明,第二行是描述,第三行是對應屬性名稱,用於反射,之後行是實際資料

\r\n換行,\t分列,單元格內依次由+、|分割

long

string

string

string

string

intsid

活動標題

活動活動名字

活動描述

是否可見

idtittle

icon

name

desc

visible

1每日簽到領取大禮簽到2

8加官進祿

jiaguanjinjue_close+jiaguanjinjue_open+huodong_bg

加官進祿

1類結構樣式

public class activityconfig : config

核心邏輯:將文字檔案split後每行是乙個linedata,以id進行索引;需要讀取對應行資料時,反射建立對應類,反射賦值後返回

可選優化:獲取資料時可以指定列,不用一次全部反射;當屬性被賦值後,刪除linedata中對應的原始鍵值對

...

dictionarylinedata;

...config instance = assembly.createinstance(configtype.fullname) as config;

fieldinfo fields = instance.gettype().getfields();

fieldinfo field;

for (int m = 0; m < fields.length; m++)

...return instance

與上訴方案基本相同,除了使用二進位制替換文字,故讀取原始資料的方法略有不同

這是unity中最快最省gc的方案(懷疑unity直接使用memcpy之類手段在記憶體中從二進位制還原成class),但是對熱更新支援並不好,可以用於儲存結構不會變化的配置

專案使用lua開發,故嘗試了雲風的pbc,使用與protobuffer區別不大

在解析時,pbc做了一些優化,如果是內嵌的結構,不會直接解出來

下方**中,解析person時name、id、email會直接解析,phone卻不會解析,仍然是原始資料,直到真正用到才會解析

package tutorial;

message person

repeated phonenumber phone = 4;

}

pbc對多維陣列支援不好,二維陣列只能使用如下樣式實現

message arrint 

repeated arrint arrarrint= 4;

解析後變成如下結構

arrarrint = },

}, ...

}

需要額外操作才能轉化為二維陣列

最終採用的方案,見這篇筆記

Unity儲存遊戲 二

在上次我們已經介紹了一些關於unity儲存遊戲的方法unity儲存遊戲 一 接下來將會介紹剩下的二種方法,分別為json方法以及xml方法。一 json json 是一種語言無關的傳送和接收資料的常用格式。可以使用它來跨平台的傳輸資料。json序列化 將儲存物件 轉化為json型別。json反序列化...

Unity遊戲存檔 (將遊戲資料儲存至本地文件)

在unity中 新增本地文件儲存遊戲資料 首先我們應該在unity中建立乙個c 指令碼,將其命名為inventory 指令碼不用掛在任何物體上,只需要在命名空間之前寫一句 如下 寫好之後儲存,在unity的檔案欄中右鍵就會發現,建立資料夾上方多了乙個inventory,就是我們 中的menuname...

Lua配置表儲存優化方案

近幾年移動端遊戲大熱,unity lua更是手遊行業的標配技術。如何有效利用有限的硬體條件,實現當前高品質 高規格的遊戲產品是持久不變的話題。lua作為乙個極為精簡的嵌入型指令碼語言,已經廣泛地用在了遊戲業,lua的存在一般是兩種場合,一種用於實現遊戲上層業務邏輯,一種則利用了lua語言本身靈活簡單...