有一个简单技巧可以解决同步销毁过程中子节点索引递减的问题,那就是从后往前销毁子节点,这种方式可以保证各个子节点的索引在销毁过程中不会发生变化:
for (int i = transform.childCount...- 1; i >= 0; --i)
{
var child = transform.GetChild(i);
Object.Destroy(child.gameObject);
}...// after truely destroy,
// some logic use obj, Ops ...
obj.DoSomething();
由于 Object.Destroy 的异步特性,在调用...实际的销毁操作发生于本帧的 Update 之后,结束于本帧的 渲染 之前.不过根据我的测试,实际销毁操作的窗口期要更小一些,应该至少是 发生于本帧的 Update 之后,结束于本帧的 LateUpdate...基于此,我们就可以明确 Object.Destroy 真正生效的时间点了:
实际的销毁操作发生于本帧的 Update 之后,结束于本帧的 渲染 之前.