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

Unity2D中Camera.main.ScreenToWorldPoint引发NullReferenceException的解决求助

问题原因及修复方案

核心原因

第19行触发NullReferenceException的直接原因是Camera.main返回了null。Camera.main的工作逻辑是自动查找场景中带有MainCamera标签的相机对象,一旦找不到符合条件的相机(比如标签被修改、相机被删除/禁用、场景切换后无对应相机),就会返回null,此时调用其ScreenToWorldPoint方法必然报错。

修复方案

方案1:恢复主相机的标签配置

  1. 在Unity编辑器层级面板中找到你的主相机对象;
  2. 选中相机后,在Inspector面板顶部的标签下拉菜单中,选择MainCamera(如果该标签不存在,点击Add Tag...创建);
  3. 确认相机对象处于激活状态(Inspector左上角的复选框是勾选状态)。

方案2:直接引用相机(更稳定的长期方案)

依赖Camera.main容易因标签误改出现问题,推荐直接在脚本中绑定相机引用:

  1. 在SelectScript类中添加一个序列化的相机字段:
    [SerializeField] private Camera mainCamera;
    
  2. 返回Unity编辑器,将主相机对象从层级面板拖拽到SelectScript组件的mainCamera赋值框中;
  3. 将代码中所有Camera.main的调用替换为mainCamera,比如:
    • 第19行:originPoint = mainCamera.ScreenToWorldPoint(Input.mousePosition);
    • 第26行:endPoint = mainCamera.ScreenToWorldPoint(Input.mousePosition);
    • 协程waitForMouseClick和waitForConnectionChange中的Camera.main也需要同步替换。

额外注意点

代码中还有几处潜在问题需要留意:

  • CreateSelectArea方法中,area.transform.position = originPoint - endPoint;执行时endPoint初始值为Vector3.zero,可能导致选区初始位置异常,建议调整为合理的初始值;
  • 协程waitForConnectionChange中的else if(connection != null)判断永远不会执行(Vector3是值类型,不可能为null),需要修正该逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:10:08