You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中MonoBehaviour的Destroy()与DestroyImmediate()方法有何区别?

Unity中Destroy()与DestroyImmediate()的差异
  • 执行时机

    • Destroy():不会立刻销毁目标,而是把销毁请求放进Unity的延迟队列,等当前帧所有Update、LateUpdate等逻辑跑完,到帧末尾的销毁阶段才执行销毁。这种延迟处理能避免当前帧内出现引用已销毁对象的错误。
    • DestroyImmediate():调用瞬间就同步完成销毁,不管当前处于帧的哪个执行阶段,属于立即生效的操作。
  • 对资源的影响

    • Destroy():仅销毁场景内的对象/组件,或者从资源实例化出来的对象,不会改动原始资源文件(比如Assets里的预制体、ScriptableObject)。
    • DestroyImmediate():除了场景对象,还能直接删除ScriptableObject这类资源文件(误操作会导致资源永久丢失),场景中的对象会立刻从层级面板消失。
  • 适用场景与安全性

    • Destroy():是Unity官方推荐的常规销毁方式,适合绝大多数游戏逻辑,比如角色死亡、道具回收等。延迟销毁的特性不会打断当前帧流程,能降低空引用异常的概率。
    • DestroyImmediate():因为立即生效的特性,很容易引发问题——比如在Update循环里调用,可能导致后续逻辑引用已销毁对象报错;遍历对象列表时调用会破坏列表结构,引发遍历异常。一般只在编辑器扩展工具里用,比如自定义窗口清理临时对象,或者极其特殊的初始化/清理逻辑中(必须严格控制使用场景)。
  • 组件销毁的细节

    • 用Destroy()销毁组件时,组件会在帧末尾被移除,但挂载的GameObject不会被销毁(除非对象所有组件都被销毁)。
    • DestroyImmediate()销毁组件时,组件会立刻从GameObject上移除,同样不会销毁对象本身,只是这个移除操作是同步完成的。

内容的提问来源于stack exchange,提问作者user21417410

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:22:08