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

来源:互联网 发布:js小球碰撞 编辑:程序博客网 时间:2024/05/16 18:59

今天终于把框架的所有调通了,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






困了......明天再来......

0 0