您的位置:首页 > 编程语言 > Lua

项目记录36--tolua 框架真机成功热跟新搞定 + 简单池子PrefabsPool.lua

2016-04-13 00:14 330 查看
今天终于把框架的所有调通了,build android也成功了,资源热跟新测试也成功,也就是手机不需要连接电脑自己修改UI,lua脚本逻辑真机直接就能看到作用的效果,太高兴了。总结下思路吧,有点犯困的节奏。

1.首先你要做资源的跟新和版本的控制就必须使用一个外网,但是穷啊用不起外网,哈哈,就在本地模拟一个咯效果一一样。我使用的是MAMPPRO这个软件使用非常简单,就是设置映射的IP,把需要更新的资源放到MAMPPRO的规定目录下面就OK了。

2.再者就是需要做版本控制,这个没什么好说的,难也不难就是比较烦硕细节很多。总的来说就是写个小工具对比你规定目录下的资源生成MD5,下载的URL等版本信息写到文件里面,服务器一份,客户端一份进行对比下载需要跟新的资源。这部分需要重构今天修改比较多。

3.服务端,我这使用时自己写的erlang服务器,就不多说,没怎么用上只是提供一个连接。

4.就是lua脚本的热跟新。之前我考虑的是直接把lua脚本打包成AB,在游戏下载完成资源后把打包的luaAB使用luaManager里面的luaState全部加载,在window下成功了,发现在android真机下有问题就是不能使用require了在真机模式下(不知道如何解决)一直报错使用require的module no found,细想了一下使用DoString进来require的脚本找不不到。最后改了直接dofile全部脚本,把lua脚本不打包AB直接丢在服务端单纯把它当做资源来下载这个就类似之前做quick-coco的版本跟新了。
_luaState.AddSerchPath(Application.peristertDataPath + "/Lua").下载跟新的脚本都放到这个目录下面,通过MD5覆盖。

--[[

* 创建人 : 星华

]]

PrefabsPool = class("PrefabsPool")

local _Instance = nil --单例

--ctor

function PrefabsPool:ctor( )

self.allPrefabs = {}

end

--单例

function PrefabsPool:Instance( )

if _Instance == nil then

_Instance = self.new()

end

return _Instance

end

--[[

Prfabs : 对象

isForever : 是否一直存在,在转换场景的时候删除false的

]]

function PrefabsPool:AddAsset(Prefab , isForever)

if Prefab.name == nil then

error("PrefabsPool --- Prefab.name == nil")

return false

end

--查看是否已经存在

local tempPretable = self.allPrefabs[Prefab.name]

if tempPretable ~= nil then

print(Prefab.name)

print("Prfabs has in !!")

return false

end

--结构

self.allPrefabs[Prefab.name]= {

obj = Prefab,

forever = isForever

}

return true

end

function PrefabsPool:GetAsset( ObjName )

local tempt = self.allPrefabs[ObjName]

if tempt == nil or tempt["obj"] == nil then

print("errro --->PrefabsPool:GetAssetObj : "..ObjName.."== nil ")

return nil

end

return tempt["obj"]

end

function PrefabsPool:Clear( )

self:RemoveScenePre()

end

--删除场景prefabs也就是isForever = nil的

--原本想着就是转场景时候清空

function PrefabsPool:RemoveScenePre( )

local keys = table.keys(self.allPrefabs)

for i=1,#keys do

local tempTb = self.allPrefabs[keys[i]]

if tempTb ~= nil and tempTb["forever"] == nil then

self.allPrefabs[keys[i]].obj = nil

self.allPrefabs[keys[i]] = nil

end

end

--释放内存

UnityEngine.Resources.UnloadUnusedAssets()

end

return PrefabsPool

困了......明天再来......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: