Unity报UnassignedReferenceException:Inspector已赋值变量仍抛出异常
解决方案
这个报错的核心原因是存在至少一个挂载了PlayerMovement脚本的GameObject,它的playerPhysics变量未被赋值,你看到功能正常是因为你赋值过的那个脚本实例在正常运行,报错是其他未正确配置的实例抛出的,按以下步骤排查即可:
- 点击控制台的报错条目,Unity会自动定位到对应出问题的GameObject,检查该对象的PlayerMovement组件的playerPhysics字段是否为空,为空就补上对应Rigidbody引用,不需要的多余对象直接删除即可。
- 排查PlayerMovement脚本的生命周期代码,确认你没有在
Awake()、Start()或者其他执行时机早于报错位置的逻辑里,手动把playerPhysics赋值为null。你也可以在访问playerPhysics的代码前加一行调试语句Debug.Log(playerPhysics, this),运行后点击日志就能确认是哪个对象的变量为空。 - 如果确认所有实例都已正确赋值、代码也无相关修改,属于Unity序列化缓存异常,做一次缓存清理即可:
- 完全关闭Unity编辑器
- 删除项目根目录下的
Library和Temp文件夹 - 重新启动Unity,等待项目资源重新编译完成
- 你也可以直接加自动兜底逻辑避免这个问题,在PlayerMovement的
Awake()方法里添加如下代码,不需要再手动在Inspector赋值:
void Awake() { if (playerPhysics == null) { playerPhysics = GetComponent<Rigidbody>(); } }
内容的提问来源于stack exchange,提问作者Brenbold
相关产品推荐
相关产品推荐

