Unity2D中Camera.main.ScreenToWorldPoint引发NullReferenceException的解决求助
问题原因及修复方案
核心原因
第19行触发NullReferenceException的直接原因是Camera.main返回了null。Camera.main的工作逻辑是自动查找场景中带有MainCamera标签的相机对象,一旦找不到符合条件的相机(比如标签被修改、相机被删除/禁用、场景切换后无对应相机),就会返回null,此时调用其ScreenToWorldPoint方法必然报错。
修复方案
方案1:恢复主相机的标签配置
- 在Unity编辑器层级面板中找到你的主相机对象;
- 选中相机后,在Inspector面板顶部的标签下拉菜单中,选择
MainCamera(如果该标签不存在,点击Add Tag...创建); - 确认相机对象处于激活状态(Inspector左上角的复选框是勾选状态)。
方案2:直接引用相机(更稳定的长期方案)
依赖Camera.main容易因标签误改出现问题,推荐直接在脚本中绑定相机引用:
- 在
SelectScript类中添加一个序列化的相机字段:[SerializeField] private Camera mainCamera; - 返回Unity编辑器,将主相机对象从层级面板拖拽到
SelectScript组件的mainCamera赋值框中; - 将代码中所有
Camera.main的调用替换为mainCamera,比如:- 第19行:
originPoint = mainCamera.ScreenToWorldPoint(Input.mousePosition); - 第26行:
endPoint = mainCamera.ScreenToWorldPoint(Input.mousePosition); - 协程
waitForMouseClick和waitForConnectionChange中的Camera.main也需要同步替换。
- 第19行:
额外注意点
代码中还有几处潜在问题需要留意:
CreateSelectArea方法中,area.transform.position = originPoint - endPoint;执行时endPoint初始值为Vector3.zero,可能导致选区初始位置异常,建议调整为合理的初始值;- 协程
waitForConnectionChange中的else if(connection != null)判断永远不会执行(Vector3是值类型,不可能为null),需要修正该逻辑。
内容的提问来源于stack exchange,提问作者MatissossGameDev
相关产品推荐
相关产品推荐

