【解决】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 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • UnityLuaMvvM Lua 带通知的Mode类

    实现数据更新UI自动刷新的核心代码 欢迎关注https gitee com xiongks UnityMVVM mode function modeType local obj obj modeType modeType obj filds
  • Unity 资源加载卸载过程

    什么时候才是UnusedAssets 看一个例子 Object obj Resources Load MyPrefab GameObject instance Instantiate obj as GameObject Destroy in
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • unity网络资源导入

    1 找到需要导入的文件 这里导入fbx格式 2 打开unity界面 在Asset目录下创建文件夹FBX 将需要导入的fbx预制体或整个文件夹拖入创建的FBX文件夹下 3 选中需要的fbx预制体并拖至场景中 4 双击定位到当前物体 5 找到需
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • Unity打包WebGL的优化常用操作?

    1 贴图部分优化 如果贴图格式时2048 在不影响画面效果的情况下 改成1024或者5 12 还可以缩小包体 2 压缩和解压缩问题 WebGL打包的时候分三种压缩情况 gzip 比Brotli文件打 但打包快 http和https都支持 B
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 游戏开发常见操作系列之敌人系统的开发一(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