zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Log4NET初接触
    wwwww
    关于ASP.NET 的进程帐户对 IIS 元数据库读访问权问题
    CentOS8 .NET Core项目部署
    CentOS7.6中安装Apache及Apache常见操作和配置说明
    .net core 命令行下启动指定端口
    Centos7安装mongodb
    centos8+oracle19开机自启动
    计算机网络常用端口
    Centos7安装mongodb
  • 原文地址:https://www.cnblogs.com/fws94/p/11416789.html
Copyright © 2011-2022 走看看