加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

unity开发小贴士之三 UGUI-Lua Component回收

发布时间:2020-12-14 21:52:32 所属栏目:大数据 来源:网络整理
导读:ugui tolua local test = {} test.b = gameobject test.c = gameobject:GetComponent(typeof(UnityEngine.UI.Button)) 首先调用UnityEngine.GameObject.Destroy(test.b) 如果test这个table也被ToLuaUnRef回收之后,发现 test.c这个引用c#中的Button对象并未

ugui tolua

local test = {}

test.b = gameobject
test.c = gameobject:GetComponent(typeof(UnityEngine.UI.Button))

首先调用UnityEngine.GameObject.Destroy(test.b)
如果test这个table也被ToLuaUnRef回收之后,发现
test.c这个引用c#中的Button对象并未从ObjectTranslator.objectsBackMap中释放出来

ObjectTranslator中的对象没有释放,应该是你Lua中还引用这这个对象。正常的做法是,保证Lua中的引用及时释放,但是这样会有很多xxx=nil的代码,如果项目开始不注意这些,后期改起来会很烦。我们的做法是在BasePanel中遍历

function BasePanel:cleanVar()
    for k,v in pairs(self) do
        if (type(v) == "userdata" or type(v) == "table") and k ~= "gameObject" then
            self[k] = nil
        end
    end
end

?关闭UI界面是在OnDestroy()中调用cleanVar()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读