Unity使用Raycast射线检测触发NullReferenceException空引用异常问题
错误原因
空引用异常的根源是cam变量为null,问题出在Start方法中的相机赋值逻辑:Camera.current是Unity专为渲染管线回调设计的临时变量,仅在OnPostRender、OnRenderImage等渲染相关生命周期函数执行时才会返回有效相机实例,在Start、Update这类游戏逻辑生命周期中调用绝大多数情况下都会返回null,因此在Update中访问cam的方法时就会触发空引用。
修复方案
你可以根据你的场景情况选择以下任意一种方案修复:
- 方案1(快速修复):将
Start方法中的赋值代码替换为cam = Camera.main;
注意:该方案要求场景中用作主视角的相机挂载了MainCamera标签,Unity默认创建的相机都会自动添加该标签,如果自定义过相机配置需要手动检查标签设置。 - 方案2(最稳妥,性能最优):将脚本中的
Camera cam;声明修改为public Camera cam;,回到Unity编辑器的Inspector面板,直接将场景里的目标相机拖到该脚本对应的cam字段上完成赋值,不需要运行时动态查找。 - 方案3(相机和脚本挂载在同一物体时用):如果相机组件和当前
PlayerController脚本挂在同一个GameObject上,可以将赋值代码改为cam = GetComponent<Camera>();
附加最佳实践
你可以在赋值后添加空校验逻辑,提前定位配置问题:
void Start() { // 这里用你选的赋值方式即可 cam = Camera.main; if (cam == null) { Debug.LogError("未找到有效相机,请检查场景配置或脚本字段赋值"); } }
内容的提问来源于stack exchange,提问作者Rafawastaken
相关产品推荐
相关产品推荐

