2015-04-24 51 views
0

我這個問題所困擾,現在相當長的一段: 我有這個靜態類:對象引用未設置爲一個實例,但是類是靜態

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:未將對象引用設置到對象的實例

但據我瞭解,是不是一個靜態類,你並不需要的情況下的宗旨它? 或我在這裏錯過了什麼?

+0

檢查這部分代碼new Vector2(VarBoard.Player.GetComponent ().health,40); 使用前,玩家需要初始化。 – sszarek

+1

Sriram,這不是重複的,op不是問如何解決這個問題,而是,你需要一個靜態成員的實例 – Sayse

+1

VarBoard.Player是空的,你需要初始化'Player' – 3dd

回答

0

他們仍然需要指出的東西在內存

MSDN

表示:「使用static修飾符來聲明靜態成員,屬於類型本身,而不是對特定對象「。

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); 

或類似的。

這有幫助嗎?

+0

不確定這裏的「singleton」是否正確。一個'static'屬性(或類)並不一定是單身。我會用「財產」來代替它。其餘的答案是正確的。 –

相關問題