从类中调用函数时抛出NullObjectReference

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从类中调用函数时抛出NullObjectReference相关的知识,希望对你有一定的参考价值。

我正在开发一个Unity2D游戏,它的类用作枪支系统的模板(我知道不是这个术语)。游戏开始时,将调用一个函数以在UI.Image元素中显示枪的缩略图。但是当我去Unity开始游戏时,它给了我编译器编辑器NullReferenceException: Object reference not set to an instance of an object PlayerScript.Start () (at Assets/Scripts/PlayerScript.cs:19)。这是PlayerScript.cs的相关部分:

using System.Collections.Generic;
using UnityEngine;

public class PlayerScript : MonoBehaviour
{

    [SerializeField] static KeyCode fireKey;
    [SerializeField] static GameObject gunGameObject;
    [SerializeField] static GunObject currentGun;
    [SerializeField] static GunObject starterGun;

    private float movementSpeed = 5f;

    // Start is called before the first frame update
    void Start() {
        currentGun = starterGun;
        Debug.Log("currentGun is " + currentGun);
        currentGun.switchGun();
    } 

这里是模板文件,它将从该模板文件调用switchGun()(GunObject.cs)

using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(menuName = "Gun")]

public class GunObject : ScriptableObject {
    [SerializeField] string gunName;
    [SerializeField] public Sprite uiImage;
    [SerializeField] GunObject nextUpgrade;
    [SerializeField] int damage;
    [SerializeField] int shotsPerSecond;
    [SerializeField] int ammoCapacity;
    [SerializeField] float bulletSpeed;

    public void switchGun() {
        Game game = new Game();
        game.gunDisplay.sprite = uiImage;
    }

谢谢您的时间。如果您需要更多信息,请发表评论。

答案

空引用异常,当您想使用null对象的实例变量时发生。在您的代码中,您实例化了Game对象,但没有实例化gunDisplay对象,并且该对象为null。当您调用game.gunDisplay.sprite时,会出现NullReferenceException。您必须像这样实例化gunDisplay

    public void switchGun() {
        Game game = new Game();
        game.gunDisplay = new GunDisplay();
        game.gunDisplay.sprite = uiImage;
    }

以上是关于从类中调用函数时抛出NullObjectReference的主要内容,如果未能解决你的问题,请参考以下文章

如何在主方法中从类中调用构造函数

我的函数独立工作,但不能从类中调用

使用 array_walk_recursive 从类中调用函数

Lumen Artisan 命令在测试时抛出“错误:调用 int 上的成员函数 assertExitCode()”

php 使用array_walk_recursive从类中调用函数

PL/SQL 函数在执行时抛出进程内存错误