对象引用未设置为实例,但该类是静态的

时间:2015-04-24 10:00:56

标签: c# unity3d

我正在努力解决这个问题很长一段时间了: 我有这个静态类:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Platformer;
{
    public static class VarBoard
    {
        public static GameObject Player;
        public static GameObject LevelGenerator;
        public static GameObject PlayerHealthBar;
        public static List <GameObject> AllEnemies = new List<GameObject> ();
        public static List <GameObject> AllFriends = new List<GameObject> ();
    }
}

此类存储所有全局变量,因此我可以在项目的各个位置使用它们,如下所示:

using UnityEngine;
using System.Collections;
using Platformer;

public class HealthBar : MonoBehaviour
{
    void Update{
        this.GetComponent<RectTransform> ().sizeDelta = new Vector2 (VarBoard.Player.GetComponent<Character> ().health, 40);
    }
}

我在this教程中找到了这个结构,对我来说这似乎是一个合理的解决方案,但是当我运行代码时我就得到了这个

  

异常:NullReferenceException:对象引用未设置为对象的实例

但据我所知,静态类的目的不是你不需要它的实例吗? 或者我在这里遗漏了什么?

2 个答案:

答案 0 :(得分:1)

您需要通过其构造函数初始化静态类对象(单例)。

public static class GameItemService
{
    // We don't have a database, just a singleton
    public static List<GameItem> LIST_OF_GAME_ITEMS; // A singleton for add/retrieve data


    static GameItemService()
    {
        LIST_OF_GAME_ITEMS= new List<GameItem>();
        // Add to the list here
    }

然后你可以使用单身人士,例如

var items = GameItemService.LIST_OF_GAME_ITEMS.Take(20);

或类似。

这有帮助吗?

答案 1 :(得分:0)

他们仍然需要指向内存中的某些东西

正如MSDN

所述
  

&#34;使用static修饰符声明一个静态成员,该成员属于该类型本身而不是特定对象。&#34;