【Unity】(土方法+插件方法)如何解决空引用异常NullReferenceException

这篇具有很好参考价值的文章主要介绍了【Unity】(土方法+插件方法)如何解决空引用异常NullReferenceException。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是空引用异常

对于新手来说,Unity 90%的运行时错误都是NullReferenceException,这里就不放chatGpt的废话了,其就是字面意思,因为各种各样的原因造成了没有引用任何东西的情况。

调试的4个步骤

  1. 找到报错位置
  2. 分析哪些造成对象可能为null的原因
  3. 找到这个出问题的对象(断点、Debug.Log(),Console.WriteLine()
  4. 根据你的判断,决定如何处理这个对象。

例子1:一般错误

public class TestNullRef : MonoBehaviour
{
    private object myObject;
    void Start()
    {
        Debug.Log(myObject);//null
        myObject.ToString();
    }
}

unity空引用异常,大学四年所写,unity,游戏引擎,c#

根据上面的报错提示,先找到错误的位置,接着理清问题后,就该如何规避了:

  • 设个条件判断
  • 让类实例,从而实现分配
void Start(){
    myObject=new TestObject();
    Debug.Log(myObject);
    myObject.ToString();
}

private class TestObject{}

unity空引用异常,大学四年所写,unity,游戏引擎,c#

例子2:移动物体

一开始我先不设变量的值。

unity空引用异常,大学四年所写,unity,游戏引擎,c#

//代码无误的
public class MoveToTarget : MonoBehaviour
{
    [SerializeField] private Transform targetTransform;
    void Update()
    {
        Vector3 moveDir = (targetTransform.position - transform.position).normalized;
        float moveSpeed = 1f;
        transform.position += moveDir * moveSpeed * Time.deltaTime;
        //朝相反的方向移动,远离
        //targetTransform.position += moveDir * moveSpeed * Time.deltaTime;
    }
}

报错:未获取变量。

unity空引用异常,大学四年所写,unity,游戏引擎,c#

如果去掉[SerializeField]改为

private Transform targetTransform;

unity空引用异常,大学四年所写,unity,游戏引擎,c#

那么,我们想解决问题,先找到错误的位置了,使用Debug.Log()查找

void Update()
{
    Debug.Log(targetTransform);
    Debug.Log(transform);
    Vector3 moveDir = (targetTransform.position - transform.position).normalized;
    float moveSpeed = 1f;
    transform.position += moveDir * moveSpeed * Time.deltaTime;
}

unity空引用异常,大学四年所写,unity,游戏引擎,c#

无论是上述哪个错误,就是没写targetTransform变量的值,补上相应的GameObject就好了。

unity空引用异常,大学四年所写,unity,游戏引擎,c#

我们除了解决这个特定的问题,我们还可以获得什么?

其实存在很多原因造成空引用异常,比如找不到你设置的变量(当然也可能你没设),或者是局部变量与全局变量有冲突等等。

所以我们更应该要培养自己debug的能力,也不要太过依赖chatGpt,因为它有时挺不靠谱的。

额外的方法

  1. 如果是抄别人的教程和代码,遇到null情况,可以选择重启Unity再次运行游戏即可,因为别人都敢出教程了,基本不太可能遇到问题。
  2. 我写有限状态机时,选择把游戏对象的数据与逻辑进行分层,当inspector显示数据信息,我又运行游戏时,也会报这个错误,总之有些空错误不是自己的问题。

插件方法

https://assetstore.unity.com/packages/tools/game-toolkits/missing-reference-finder-257205文章来源地址https://www.toymoban.com/news/detail-695362.html

到了这里,关于【Unity】(土方法+插件方法)如何解决空引用异常NullReferenceException的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 腾讯地图系列(三):微信小程序引用插件的问题解决

    问题一:微信小程序添加插件报错插件不存在 问题二: 微信小程序插件未授权使用,请添加插件 问题三:微信公众号添加插件,搜索不到腾讯服务路线规划或者别的插件 问题四:添加失败,小程序类目不符合引用该类目插件的要求或主体类型不符合要求 问题五:微信小程

    2024年02月01日
    浏览(66)
  • Unity如何引用dll

    这里介绍两种方法,针对不同的需求,方法一针对已知明确的dll,而且量少依赖少的dll;方法二通用推荐;方法三,通用(不推荐); 将所需要的文件夹放置到Unity项目的Plugins文件夹下 例如我这边有一个onnx的dll库,直接拖入到plugins文件夹下即可 然后我们双击任何一个脚本进入

    2024年02月07日
    浏览(57)
  • 【Android Gradle 插件】更新依赖方式,同时解决github三方库引用无法使用问题

    目录 首先看一下完整的 settings.gradle 依赖介绍 1、Maven 远程仓库配置 2、目录配置 3、完整代码示例 二、根目录下 build.gradle 构建脚本分析 pluginManagement 脚本块 , 用于 配置 Gradle 插件的 Maven 仓库 , 配置的是 构建过程 中 , 使用的仓库 ; dependencyResolutionManagement 脚本块 , 用于 配置

    2024年02月16日
    浏览(38)
  • 在 Unity 解决方案中引用外部工程(.csproj)或 NuGet 包

    本人近期制作一服务端和客户端程序,采用下列架构实现: 服务端(Server.exe) 中间件(Shared.dll,实现两端共享的那部分代码) 客户端(Client.exe,用 Unity 实现) 在不使用 Unity 的情况下,一般把三个工程(.csproj)放入同一解决方案(.sln),然后在服务端和客户端添加对中

    2024年02月02日
    浏览(33)
  • 彻底解决 unity 用 vscode 无 代码补写 快速修复 引用 等问题

    ①打开vscode,点击插件部分(左上角的倒数第二个,四个方框)点击C#插件。 ②点击卸载右边的小箭头,点击安装另一个版本,稍等片刻电脑可能会加载比较慢。 ③等到屏幕中上方出现各版本,挑选2.5版本以下2.4版本以上任意版本并点击。 ④等待片刻,点击左边C#插件中

    2024年02月05日
    浏览(37)
  • VS Code开发插件使用 pnpm 打包异常的解决姿势

    刚刚准备发一个插件,发现用 pnpm 打出一个本地插件包直接扑街了。 这里只聚焦错误问题的解决,不是发插件的教程。。 聊点背景信息,vscode 的插件命令行的是 vsce 这个模块提供的 cli 能力去做的 pnpm : 8.x 本地打包的命令: vsce package version -m \\\"message\\\" vsce package --help 可以看到

    2024年04月10日
    浏览(46)
  • vue项目引用海康视频插件(web1.5),el-date-picker下拉选择时间面板会被遮盖问题解决。

    一、海康插件浮窗的层级,会把项目中时间控件中的时间选择面板挡住,导致时间面板显示不全,无法选择时间。如图所示: 二、解决办法:调用API中的JS_ JS_CuttingPartWindow(iLeft, iTop, iWidth, iHeight )方法, 三、效果图 四、API接口文档 大致意思就是当点击时间控件出现时间选择

    2024年02月11日
    浏览(40)
  • 【python】如何安装requests库,以及如何引用(含报错如何解决)

    非常非常重要,后期操作大多都需要requests库,那么这篇文章就来分享下如何安装requests库,以及在python中如何引用 首先,看一下如何安装 1、定位到python的 scripts文件路径 2、使用命令安装pip install requests 安装requests库 3、在编辑器(我的是pycharm)中输入import requests如果没有报

    2024年02月20日
    浏览(49)
  • JVM是如何解决跨代引用的?

    假如要现在进行一次只局限于新生代区域内的收集(Minor gc),但新生代的对象1在老年代中被引用,为了找出该区域(新生代)中所有的存活对象,不得不在固定的gc roots之外,在额外遍历整个老年代中所有对象来确保可达性分析结果的正确性。 遍历整个老年代所有对象的方案

    2024年03月14日
    浏览(40)
  • Unity——DOTween插件使用方法简介

      缓动动画既是一种编程技术,也是一种动画的设计思路。从设计角度来看,可以有以下描述 事先设计很多基本的动画样式,如移动、缩放、旋转、变色和弹跳等。但这些动画都以抽象方式表示,一般封装为程序函数 动画的参数可以在使用时指定,如移动的起点和终点、旋

    2024年02月05日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包