唉,我好菜啊,本来想自己实现一套热更的,但是毫无思路,还是一步一步来吧,先抄抄看看别人的东西怎么样吧,写了个helloworld,支持资源和代码热更。

读取的json数据,在公司里面应该是读取服务器下发的协议数据,应该更麻烦。
json:
{
"nodes": [
{
"Name": "kk",
"Exp": 100,
"Job": "AK1",
"CombatPower": 300
},
{
"Name": "lisi",
"Exp": 1000,
"Job": "AK2",
"CombatPower": 15
},
{
"Name": "lufei",
"Exp": 200,
"Job": "AK3",
"CombatPower": 150
},
{
"Name": "solong",
"Exp": 300,
"Job": "AK4",
"CombatPower": 2
}
]
}
define.lua:

我添加了RankView和RankCtrl

这里没有操作,其实可以把后面常用的luacomponent(都是静态方法)添加进来;
functions.lua

添加了全局函数,方便查找子节点
注意这里用cjson来操控json的加载和序列化。
json就放到指定文件夹下就可以了,看下面代码路径。
RankCtrl:
RankCtrl = {
};
local this = RankCtrl;
local luaBehaviour;
local transform;
local gameObject;
local data;
local json = require "cjson"
local util = require "3rd/cjson/util"
local isExp = false;
require "Controller/RankItem"
--构建函数--
function RankCtrl.New()
logWarn("RankCtrl.New--->>");
return this;
end
function RankCtrl.Awake()
logWarn("RankCtrl.Awake--->>");
panelMgr:CreatePanel('Rank', this.OnCreate);
end
--启动事件--
function RankCtrl.OnCreate(obj)
gameObject = obj;
luaBehaviour = gameObject:GetComponent('LuaBehaviour');
logWarn("Start lua--->>"..gameObject.name);
resMgr:LoadPrefab('rank', {
'RankItem' }, this.InitPanel);
-- 事件注册
luaBehaviour:AddClick(RankPanel.btnClose, this.OnClick);
luaBehaviour:AddClick(RankPanel.btnExp,function()
RankPanel.txtRankValue:GetComponent("Text").text = "经验值";
this.isExp = true;
this.Refresh();
end);
luaBehaviour:AddClick(RankPanel.btnCombatPower,function ()
RankPanel.txtRankValue:GetComponent("Text").text = "战力";
this.isExp = false;
this.Refresh();
end);
end
--初始化面板--
function RankCtrl.InitPanel(objs)
---@type table
this.data = this.LoadData();
table.sort(this.data.nodes,function (d1,d2)
return d1.CombatPower<d2.CombatPower;
end);
local parent =RankPanel.RankItemParent;
for i=1,#this.data.nodes do
local go = newObject(objs[0])

本文深入探讨了热更新技术在游戏开发中的应用,通过一个具体的案例,详细介绍了如何利用Lua脚本和LuaComponent组件实现资源和代码的热更新。文章涵盖了从JSON数据解析到面板动态刷新的全过程,并分享了作者在实现过程中的心得与挑战。
最低0.47元/天 解锁文章
4307

被折叠的 条评论
为什么被折叠?



