[纪录]Lua+Unity进行临时的数据本地化处理

      嘤嘤嘤,转眼又拼了一个多月UI了,自己已经是个没用的rua鸡了,最近啥也没学,是真的没啥写的了。随便找点百度能找得到的东西发上来吧!
      最近去了新项目组,新项目组还在做demo,每天自己XJB搞,最近需要一个存档功能,于是就开始琢磨怎么把lua数据本地化。
      开始我寻思的是把lua数据直接io成一个文件,然后我用的时候直接require一下就完事了,后来发现我们资源都在resource里,lua的io直接报废不能用。写也写不出来,读也读不到,真rua鸡(是我rua鸡,因为我根本不知道为啥写不进也读不出)。
      后来想想,反正都是字符串,不然直接用unity的PlayerPrefs算了,然后我再读字符串转回表就行了。算了不多BB了,代码简单的eb我直接贴了

function PlayerData.savePlayerData()
    local str = PlayerData.getPlayerDataString()
    Util.SetString("playerData", str)
    ----测试用文件存档  打包时删掉
    local file = io.open("test.lua", "w")
    file:write(str)
    file:close()
end

function PlayerData.getPlayerDataString()
    local string = "local playerData = "
    string = PlayerData.toSerial(player, string)
    string = string .. "\nreturn playerData"
    return string
end

function PlayerData.toSerial(tb, str)
    if type(tb) == "number" then
        str = str .. tb
    elseif type(tb) == "string" then
        str = str .. string.format("%q",tb)
    elseif type(tb) == "boolean" then
        if tb == true then
            str = str .. "true"
        else
            str = str .. "false"
        end
    elseif type(tb) == "table" then
        str = str .. '{\n'
        for i, v in pairs(tb) do
            str = str .. '[' 
            str = PlayerData.toSerial(i, str) 
            str = str .. ']='
            str = PlayerData.toSerial(v, str)
            str = str .. ',\n'
        end
        str = str .. '}\n'
    end
    return str
end

      感觉没啥好说的,就直接莽就完了,其中util就是自己封装的PlayerPrefs:

    public static string GetString(string key)
    {
        return PlayerPrefs.GetString(key);
    }

    /// <summary>
    /// 保存数据
    /// </summary>
    public static void SetString(string key, string value = default(string))
    {
        PlayerPrefs.DeleteKey(key);
        PlayerPrefs.SetString(key, value);
    }

      最后贴个生成的结果(io成文件只为了debug):缩进挺rua鸡的,但是总比print的强,

local playerData = {
["addTalkData"]={
[1009]={
[1]="MQ1_13",
}
,
[1001]={
[1]="MQ1_1",
[2]="MQ1_2",
[3]="MQ1_3",
}
,
}
,
["teamData"]={
[1]=1001,
}
,
["dateData"]=391,
["fatherQuestTable"]={
["MQ1"]={
["questId"]="MQ1",
["finish"]=false,
["acceptTime"]=391,
}
,
}
,
["addNpcActionData"]={
}
,
["currentPlace"]=1001,
["bagData"]={
}
,
["currentCity"]=1001,
["positionData"]=2,
["talkFinishData"]={
["MQ1_3"]=true,
["MQ1_2"]=true,
["MQ1_1"]=true,
}
,
["questTarget"]="MQ1_5",
["battleFinishData"]={
[1003]="win",
}
,
["buyData"]={
}
,
["currentNpc"]=1001,
["addNpc2CityData"]={
}
,
["addNpc2PlaceData"]={
}
,
["Money"]=10,
["subQuestTable"]={
["MQ1_3"]={
["questId"]="MQ1_3",
["finish"]=true,
["acceptTime"]=391,
}
,
["MQ1_2"]={
["questId"]="MQ1_2",
["finish"]=true,
["acceptTime"]=391,
}
,
["MQ1_5"]={
["questId"]="MQ1_5",
["finish"]=false,
["acceptTime"]=391,
}
,
["MQ1_4"]={
["questId"]="MQ1_4",
["finish"]=true,
["acceptTime"]=391,
}
,
["MQ1_1"]={
["questId"]="MQ1_1",
["finish"]=true,
["acceptTime"]=391,
}
,
}
,
}

return playerData

      对了,最后还有一个事儿,Xlua不知道是用的lua版本跟tolua不一样还是咋的,百度了半天怎么从字符串转回表,人家都是loadstring,我试了半天都说没这函数,最后用load(好像是反射)加载回来的:

player = load(Util.GetString("playerData"))()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • Lua内部采用一种通用的基础数据结构来表示所有数据类型,Lua语言及其精简,只有字符串和表两种最基本的数据结构。然...
    JunChow520阅读 2,309评论 0 1
  • 指令集 lua_capture_error_log lua_use_default_type lua_malloc...
    吃瓜的东阅读 11,996评论 0 2
  • Lua是目前国内使用最多的热更语言,基于Lua的热更框架也非常多,最近学习了一下ToLua的热更框架,主要使用的问...
    达也酱阅读 21,922评论 4 38
  • 第一篇 语言 第0章 序言 Lua仅让你用少量的代码解决关键问题。 Lua所提供的机制是C不擅长的:高级语言,动态...
    testfor阅读 2,664评论 1 7
  • 1. 写在前面 很多时候我们都需要借助一些脚本语言来为我们实现一些动态的配置,那么就会涉及到如何让脚本语言跟原生语...
    杰嗒嗒的阿杰阅读 3,429评论 9 31