天天看點

Unity本地資料存儲---Sqlite和JSON

2014-04-30更新 剔除了使用網絡上爛大街的SQLite使用方法(原因android下無法讀取資料),使用libSQLite3.so,通過DLLImport,在C#代碼裡直接調用C接口 這種原生調用SQLite的方式,我在pc、android上親測無誤,ios沒測過,但是stackoverflow上有兄弟試過,沒問題。園子的朋友如果可以測IOS的,歡迎提供結果

基本思路,遊戲基礎配置資料,比如怪物的屬性、裝備模闆屬性、關卡怪物等,使用SQLite(Unity插件SQLiteUnityKit-,推薦用戶端),管理友善

玩家核心資料(屬性、裝備、技能)使用JSON格式,加密儲存在Application.persistentDataPath路徑裡,避免每次更新被覆寫

 1 litJson.dll放在Plugins目錄下

 2 libsqlite3.so檔案放到 Assets/Plugins/Android目錄下

 3 自定義的SQLite DB資料檔案放到 Assets/StreamingAssets目錄下

 将準備好的DB資料檔案拷貝到Assets/StreamingAssets

 把SQLiteUnityKit

GitHub下載下傳的壓縮包裡的 DataTable.cs、SqliteDatabase.cs,拷貝到項目中的任意位置

 最終項目結構看起來是這樣子的

 SQLiteUnityKit架構用Dictionary資料結構模拟了DataTable,DataRow,是以我們執行查詢語句的時候,傳回的是DataTable,就像平時使用ado.net提供的查詢模式一樣。

 調用方式

我做了個,大家可以下載下傳導入

原先是使用XML格式來存儲資料的,因為XML跨平台,但是Json同樣也可以做到,加上有LitJson這個格式轉化利器,是以,本地檔案存儲格式,本文以Json為例。

使用c#提供的加密類即可,自己定義秘鑰

安卓機子上泛濫各種XXX破解版,關于破解版的問題,我們可以通過Unity提供的唯一機器ID,在寫入玩家資料的時候,将其一并寫入到資料中去,在讀取資料之後,對比該ID和本機ID,如果不一緻,則認為是破解版

本例子是以基礎配置資料為例,是以代碼中不提供該功能。

Unity提供了一個隻讀路徑,放在該路徑下的檔案,不會被軟體更新所影響。

 下面的代碼将提供了一個自定義窗體,允許開發者自行定義使用者在等待界面時,顯示本地配置好的文字

 按照道理,這種遊戲基礎配置類的應該使用Sql方式來進行資料互動,本文僅僅是為了進行功能的示範。

隻有玩家資料,才使用本地檔案存儲的方式,存儲在永久的路徑裡面