2014-03-03 38 views
2

我正在Unity中開發我的第一款遊戲,並且我嘗試應用Abstract Factory模式創建遊戲的怪物。我有一個接口,所有的怪物應該實現:嘗試實現抽象工廠時,對象引用未設置爲對象

interface IMonster 
    { 
     void setSpeed(float s); 
     float getSpeed(); 
     void SetMonsterPosition(Vector2 pos); 
     Vector2 GetMonsterPosition(); 
     void DestroyMonster(); 
     void MoveMonster(); 
    } 

我有一個具體的怪物

public class Monster2 : MonoBehaviour, IMonster 
{ 

    .... 

    public Monster2() 
    { 
     speed = Random.Range(0.05f, 0.15f); 
     monster = (GameObject)Instantiate(Resources.Load("Monster2")); 
     float height = Random.Range(0, Screen.height); 
     Vector2 MonsterStartingPosition = new Vector2(Screen.width, height); 
     MonsterStartingPosition = Camera.main.ScreenToWorldPoint(MonsterStartingPosition); 
     monster.transform.position = MonsterStartingPosition; 
    } 

    .... 

} 

我想創建一個具有它返回一個新的怪物對象,所以我會的方法的工廠類隨後可以隨機創建具體的怪物對象。我寫道:

class MonsterFactory 
    { 

     public IMonster getMonster() 
     { 
      return new Monster2(); 
     } 
    } 

,我試圖用這個廠在我的主要是這樣的:

private IMonster monster; 
    private MonsterFactory myMonsterFactory; 

    void Start() { 
     monster = myMonsterFactory.getMonster(); 
    } 

當我試圖運行遊戲,我得到以下錯誤NullReferenceException: Object reference not set to an instance of an object任何想法我做錯了?

+0

'myMonsterFactory'爲空? –

+2

你應該聲明你的MonsterFactory和getMonster方法是靜態的。 –

+0

@DavidBrabant謝謝大衛,我是這樣解決的。 –

回答

0

變化GetMonsterMonsterFactory類方法是靜態

class MonsterFactory 
{ 
    public static IMonster GetMonster() 
    { 
     return new Monster2(); 
    } 
} 

在你Main方法調用它

private IMonster monster; 

void Start() 
{ 
    monster = MonsterFactory.GetMonster(); 
} 
相關問題