• Unity3D Destroy方法的细节


    当我们想销毁一个集合中的所有物体时

    很容易想到会这么做

    List<GameObject> goes = new List<GameObject>(); 
            for (int i = 0; i < goes.Count; i++)
            {
                Destroy(goes[i]);
            }

    用一个for循环

    遍历到所有的物体

    然后将每个物体 i 销毁

    然而,再仔细想一下

    当把第0个物体销毁了

    那原来的第1个物体,不就是第0个物体了吗

    按这个逻辑

    不应该是Destroy(goes[0])吗

    对的,这个逻辑没错

    问题就出在Destroy这个api身上

    Destroy会在当前帧结束的时候再把物体销毁

    也就是说

    当把第0个物体销毁时,当前帧此物体还在

    想销毁下一个物体,自然是销毁物体1,而不是物体0

    所以,在销毁前想要处理一些逻辑时

    就需要注意到这一点

    当然,也有办法可以将物体立马销毁,而不是在当前帧结束时销毁

    DestroyImmediate

    这个api可以执行立刻销毁的操作

    也就是说,如果用这个api写文章最开始的逻辑,那么就是

    List<GameObject> goes = new List<GameObject>(); 
            for (int i = 0; i < goes.Count; i++)
            {
                DestroyImmediate(goes[0]);
            }

    没错,这里的参数就是0了

    当然,Destroy也有延迟销毁的函数重载

    Destroy(gameObject, 5);

    这个API就是在5秒后再销毁gameObject

  • 相关阅读:
    [蓝桥] 基础练习 数列排序(java)
    关不掉之以假乱真
    关不掉.vbs
    1.3内置数据类型
    1.2成员变量+类变量+static关键字
    1.1变量+命名规则
    Java 大数任意进制转换
    打印十字图
    c语言求最大公约数和最小公倍数
    核桃的数量
  • 原文地址:https://www.cnblogs.com/fws94/p/11416789.html
Copyright © 2020-2023  润新知