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

Unity切换场景/交互时报GameObject已销毁仍被访问错误求助

问题根因

你遇到的报错核心原因是 Unity新输入系统(Input System)的InputAction事件订阅没有手动取消:

  1. InputActionReference引用的是项目中的全局输入动作资产,不会随着场景切换销毁
  2. 你在MenuController的Start方法中给输入动作的performed事件绑定了Shoot回调,切换场景时MenuController实例随菜单场景卸载被销毁,但输入动作上绑定的回调不会自动清除
  3. 后续触发射击输入时,输入动作会尝试调用已经被销毁的MenuController实例的Shoot方法,就会抛出对象已销毁的错误
修复方案
  • 给MenuController添加OnDestroy生命周期方法,在对象销毁时主动取消事件订阅,新增代码如下:
private void OnDestroy()
{
    shoot.action.performed -= Shoot;
    // 如果后续用到shoot2也需要对应取消对应回调的订阅
    // shoot2.action.performed -= 你绑定的对应回调方法;
}
  • 去掉Shoot方法前冗余的async关键字,你的代码中没有任何await异步操作,不需要加async修饰,避免不必要的异步上下文残留导致的额外问题,修改后方法声明为:
void Shoot(InputAction.CallbackContext obj)
  • 你提到的另一个功能相似的交互脚本也是同样的问题,只要是订阅了InputAction事件的MonoBehaviour,都需要在自身销毁时取消对应事件的订阅,避免回调残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:09