【Unity】Destroy方法不是立即删除

问题描述

在做任务列表时,发现任务的排序位置并不正常,有些地方会很空


原因分析:

开始以为是自己设置位置出现了问题,后来一步步看设置位置的代码,发现是使用了NGUI的UITabel组件的Reposition进行的位置排列。于是便查看源码,进行断点查看,发现Reposition里面有个GetChildList方法会计算当前节点下面处于显示状态的子节点数量,但我在unity中看只有5个子节点,但此处有时候显示了9个子节点,其中有4个是重复的。此时进行的判断就是因为节点数不对导致位置不正常。
但就是为什么会出现这个情况?这部分的代码的逻辑是先把所有元素删除,在重新添加,我想的就是是不是执行顺序有问题,先增加再执行排列位置再删除,这样才能解释清楚。检查一遍代码后发现并没有问题,直到看到Destroy时才想起他并不是立即删除,而是异步执行,会在下一帧才删除。所以才会发生这个现象,在排列位置时是按照9个元素来排列,排列完后再删除掉那些元素,所以位置会出现问题。


解决方案:

第一时间我想的就是把Destroy方法换成DestroyImmediate方法来立即删除,但考虑如果这部分代码执行的次数过多(老代码遗留问题,应该是刷新时进行更新数据而不是简单粗暴的删除重新创建)可能会阻塞主线程导致卡顿,最后还是给在执行Reposition时做了处理,在0.1秒后执行这个方法,此时删除也已经删除掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值