从类中调用函数时抛出NullObjectReference

问题描述 投票:0回答:1

我正在开发一个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;
    }

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

c# unity3d
1个回答
0
投票

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

    public void switchGun() {
        Game game = new Game();
        game.gunDisplay = new GunDisplay();
        game.gunDisplay.sprite = uiImage;
    }
© www.soinside.com 2019 - 2024. All rights reserved.