2014-03-03 39 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(); 
} 
相关问题