【解决】NullReferenceException: Object reference not set to an instance of an object

2023-11-08

游戏引擎:Unity
版本:2019.4.6f1 【2017版本以上均可】
编译平台:Visual Studio 2019

一、问题描述


描述
原 文 [报错] NullReferenceException: Object reference not set to an instance of an object
中 译 空引用异常:对象引用未设置为对象的实例

注意:这是一个逻辑层错误所导致的 Error 类型警告。
2022/11/22 更新

  • 注意:在某些情况下该类型问题属于 Unity 引擎自身问题所导致。并非由于开发者程序逻辑不严谨性所导致。

二、解决方案


2.1 程序开发者主观角度

情景描述 01:Runtime 模式下,抛出此异常。通过控制台指出代码行XXX行出现此问题。

解决方式:

  • 检查 该行内容表现未 NULL 的字段、属性。
    例如 Component/GameObject 声明属性在其他类中调用时,未体验赋值。建议使用 GetComponent<T>()FindObjectOfType<T>()等方法在 Awake/Start 或其他调用该属性前完成赋值行为。
  • 检查 是否对 ListDictionaryArray 等一类属性,有确认使用过 new 方式开辟空间地址。
    默认情况下这类操作需程序初始化阶段中实现。
  • 检查NULL对象是否被创建、激活、且存在于场景中。
    例如 存在情况下,懒汉模式的单例未被创建于场景中。
  • 其他注意事项,对入门级开发者,偏向于 Inspector 窗口拖拽赋值。若未进行该操作,也同样出现该问题。

情景描述02: 确认操作过程中,有在执行前调用该方法或其他赋值行为操作,但仍然出现此类问题。

解决方式:

  • 检查 属性赋值匹配规则是否错误。
    例如 Resource.Load(Prefabs/XXX) as GameObject,实际上需要加载的是 xxx 对象。
    或是 UnityEngine.Transform引用,实际上我使用的是MyFramework.Transform,但计算机识别的TransformUnityEngine的,未发现,
  • 检查 匹配规则是否正常被调用。
    例如 匹配规则的生命周期 在调用之后。
    或是 匹配规则未纳入至生命周期内 调用。(未执行)

情景描述03: 检查 实例化对象是否为抽象

原因:抽象类无法实例化,导致这一过程是Null


关于其他调试排查方式:

  存在部分情况下,双击 Unity Conslon(控制台),不会直接弹出问题处的情况,根据其提供的脚本对象逐一使用 Debug.Log() 排查,或配合Visual Studio提供的 “附加到Unity” 调试功能,进行排查代码逻辑是否有误。

2.2 Unity 引擎自身客观问题

情景描述: 部分情况下,此类型问题伴随解释并非指明源于开发者撰写的程序脚本。其指向均为 Unity 引擎下的 UnityEditor API对象。如下图所示:

在这里插入图片描述
  截止 2022年11月22日,Unity 在 2021.3.6版本上仍然保留该类型问题。其造成的原因可能是 Animator 视窗,此问题频繁出现在 Unity Runtime模式下。当 Animator 被关闭后,警报错误消失。参考网络文章 Unity 论坛 可追溯此问题最早出现于 2018版本。这是 Unity 引擎自身所遗留的 BUG 问题,非开发者主观造成。

解决方案:重启 Unity 工程。


情景描述: 程序逻辑性严谨,排查无误,但仍然出现此类报错信息。

原因:这是极端情况下,Unity 重编译不及时所导致发生的问题。

  • 有时候代码的修改内容并不会被 Unity 同步重编译。多次尝试修改保存后,即解决这类问题。
  • 若 存在其他 Error 信息,请优先解决其他 Error 问题,这些 Error 仍能阻碍重编译进行,使得已修复的代码行无法参与编译,并抛出 Null 引用错误信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【解决】NullReferenceException: Object reference not set to an instance of an object 的相关文章

  • halfShader 模型切割

    Shader Unlit halfShader Properties Diffuse Diffuse Color 1 1 1 1 MainTex Texture 2D white StartCutoff StartCutoff Range
  • unity game界面按下play会不断闪烁,按下暂停键(pause)或者中止/下一步(step),game界面的画面会接连变化

    没找到答案 改了两个下午的程序 改完还是这样 后来发现是FixedUpdate Update与OnDrawGizmos的问题 OnDrawGizmos是每帧都会绘制 用FixedUpdate理所当然就那啥了 分析的时候 就突然想到是不是这俩
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • c#获取cpu序列号

  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • 01-----关于Qt的Error while building/deploying project Onvif_Client (kit: Desktop Qt 6.0.2 MinGW 64-bit)

    1 可能出现Qt的Could not determine which make command to run Check the make step in the build configuration Error while buildi
  • Qt TCP & UDP 使用总结

    使用Qt Network模块开发了一个UDP和TCP测试工具 client和server都写在一起 运行时先选择模式 其中TCP部分主要使用QTcpServer和QTcpSocket两个类 采用异步方式 开始是参考霍亚飞的 Qt Creat
  • 一篇搞懂 Java线程池

    一篇搞懂 Java线程池 前言 线程池参数 线程池的主要处理流程 线程池测试 线程池任务队列 线程池拒绝策略 Java提供的默认线程池 定长线程池 FixedThreadPool 定时线程池 ScheduledThreadPool 可缓存线
  • Selenium WebDriver详解,什么是Selenium WebDriver?

    随着许多测试团队从手动测试转向自动化测试 找到适合他们的框架可能会让人不知所措 大多数转向自动化的团队都听说过Selenium WebDriver 并且知道它是一种用于 Web 自动化的免费开源工具 但是随着开源测试框架的激增 许多人怀疑这
  • JVM学习笔记(快速版)

    JVM 1 常见面试问题 1 谈谈堆JVM的理解 2 java8中JVM的新内容 3 什么是OOM 什么是StackOverFlowError 怎么分析 4 JVM的调优常见参数 5 内存快照如何抓取 6 如何分析Dump文件 2 JVM的
  • 我的周刊(第001期)

    我的信息周刊 记录这周我看到的有价值的信息 主要针对计算机领域 内容主题极大程度被我个人喜好主导 这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享 项目 image to latex 1 可以将数学公式截图然后自动解析成LaTe
  • S5P4418裸机之SDIO程序

    简介 SDIO Secure Digital Input and Output 即安全数字输入输出接口 它是在SD卡接口 的基础上发展而来 通常的存储设备 如TF卡 以及EMMC等存储芯片都是通过SDIO总线来通信的 一 s5p4418的S
  • conda init

    在输入conda activate 的时候出现报错 解决 需要使用 conda init 进行初始化 的错误通常是由于你的系统环境缺少 conda 的初始化脚本所致 当你尝试在终端中执行 conda activate 命令时 会出现此错误提
  • 1.1 new关键字及内存泄漏

    new关键字是C 用来动态分配内存的主要方式 代码演示 new可以直接分配单个变量的内存 也可以分配数组 在分配单个对象的内存时 当对象是普通变量时 可以分配对应的内存 include
  • 雪球网

    aa 600774 600715 002962 002706 600874 002730 300328 600727 834779 300188 300225 603967 002637 000715 837679 300310 30048
  • linux 目录文件对比,Linux下快速比较两个目录的不同

    曾多次想要在Linux下比较目录a和目录b中文件列表的差别 然后对目录a比目录b中多出的文件 少掉的文件分别做处理 但是 在网上搜索了多次也都没找到能直接处理好的工具 所以想了很多不少方法 自我感觉都不错 而且网上似乎没有这方面的文章 所以
  • Python数据分析实战(3)Python实现数据可视化

    文章目录 一 数据可视化介绍 二 matplotlib和pandas画图 1 matplotlib简介和简单使用 2 matplotlib常见作图类型 3 使用pandas画图 4 pandas中绘图与matplotlib结合使用 三 订单
  • 出现次数最多的数CSP201312-1(简单c语言解法)

    问题描述 给定n个正整数 找出它们中出现次数最多的数 如果这样的数有多个 请输出其中最小的一个 输入格式 输入的第一行只有一个正整数n 1 n 1000 表示数字的个数 输入的第二行有n个整数s1 s2 sn 1 si 10000 1 i
  • Linux中ssh基于密匙的安全验证过程是怎样的?

    在Linux中 ssh是非常重要的存在 但很多人对 ssh 这个概念很模糊 听起来也很晦涩难懂 那么Linux ssh是什么 有什么用 这篇文章为你解答一下 SSH是一种协议 SSH是较可靠 专为远程登录会话和其他网络服务提供安全性的协议
  • BufferedImage 基本操作

    1 创建一个图片 并且写入文件 BufferedImage grayImage new BufferedImage 512 512 BufferedImage TYPE INT ARGB ImageIO write grayImage jp
  • 利用函数求数组[5,2,99,101,67,77]中的最大值

  • 后台开发工具篇之xampp

    一 解决问题 在进行后台开发时 我们很多时候都需要先在本地编写与调试代码 这就需要我们首先在本地搭建服务器开发环境 但是 搭建过的朋友应该知道 环境的搭建可不是三两步就可以搞定的 举例来说 如果我们要在本地Windows环境中搭建PHP服务
  • 图像预处理——CV

    目录 1 图像预处理 1 1 图像显示与存储原理 1 2 图像增强的目标 1 3 点运算 基于直方图的对比度增强 1 4 形态学处理 1 5 空间域处理 卷积 1 6 卷积的应用 平滑 边缘检测 锐化等 1 7 频率域处理 傅里叶变换 小波
  • 薪资12k,在银行外包做软件测试是一种什么体验...

    背景 本人普通二本本科毕业 4 年 目前是在广州工作 是一家大型的人力外包公司外包到银行的开发人员 这可能也是长期在各大招聘软件上最积极的招聘岗位 从入职到现在已经有四个月了 也大概了解了外包的主要工作情况 也有了一些心得体会 借此机会也简
  • 【解决】NullReferenceException: Object reference not set to an instance of an object

    游戏引擎 Unity 版本 2019 4 6f1 2017版本以上均可 编译平台 Visual Studio 2019 一 问题描述 描述 原 文 报错 NullReferenceException Object reference not