Unity中NullReferenceException异常求助:空引用问题未定位
解决Unity中的NullReferenceException报错
报错信息:
NullReferenceException: Object reference not set to an instance of an object UnitClick.Update ()
问题出在代码中Ray ray = myCam.ScreenPointToRay(Input.mousePosition);这一行,说明myCam变量为空,无法调用其方法。以下是具体排查和解决步骤:
1. 修复myCam为空的问题
myCam通过Camera.main赋值,而Camera.main仅会返回带有MainCamera标签的相机,常见原因及解决:
- 场景中没有相机添加
MainCamera标签:选中你的相机,在Inspector面板的Tag下拉菜单中选择MainCamera。 - 场景中有多个相机带
MainCamera标签:确保只有一个相机使用该标签,避免Camera.main返回结果异常。 - 相机是动态生成的:
Start方法执行时相机尚未创建,此时Camera.main会返回null。可以改用更可靠的获取方式:void Start() { // 优先取MainCamera,没有则取场景中第一个相机 myCam = Camera.main ?? FindObjectOfType<Camera>(); // 强制检查,避免后续静默出错 Debug.Assert(myCam != null, "场景中未找到可用相机,请检查相机设置!"); } - 若你将
myCam改为public属性:必须在Inspector面板中手动拖入场景中的相机对象,否则变量依然为空。
2. 额外排查潜在的空引用点
后续代码中调用UnitSelections.Instance的方法,如果该单例未正确初始化,也会触发相同报错:
- 检查
UnitSelections类是否正确实现单例:确保在Awake方法中赋值Instance = this,且该脚本已挂载到场景中持久存在的GameObject上。 - 确认
UnitSelections的实例未被意外销毁(比如场景切换时未保留)。
你提到重写代码、修改射线逻辑无效,核心原因还是变量未正确初始化,按上述步骤逐一排查即可解决。
内容的提问来源于stack exchange,提问作者VacAge
相关产品推荐
相关产品推荐

