从类中调用函数时抛出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()”