Unity切换场景/交互时报GameObject已销毁仍被访问错误求助
问题根因
你遇到的报错核心原因是 Unity新输入系统(Input System)的InputAction事件订阅没有手动取消:
InputActionReference引用的是项目中的全局输入动作资产,不会随着场景切换销毁- 你在
MenuController的Start方法中给输入动作的performed事件绑定了Shoot回调,切换场景时MenuController实例随菜单场景卸载被销毁,但输入动作上绑定的回调不会自动清除 - 后续触发射击输入时,输入动作会尝试调用已经被销毁的
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
相关产品推荐
相关产品推荐

