2014-03-03 2 views
2

Unity에서 첫 번째 게임을 개발 중이고 Abstract Factory 패턴을 적용하여 게임의 괴물을 만들려고합니다. 나는 모든 몬스터가 구현해야 페스가 : 나는 구체적인 몬스터추상 팩토리를 구현하려고 할 때 객체 참조가 객체로 설정되지 않았습니다.

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

    .... 

} 

에게이

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

을 그리고 나는 있도록 새로운 몬스터 개체를 반환하는 방법이있는 공장 클래스를 만들려면 나중에 콘크리트 Monster 객체를 임의로 만들 수 있습니다.

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 모든 아이디어를 얻을 게임을 실행하려고 무엇을 내가 잘못하고있는거야? MonsterFactory 클래스

+0

'myMonsterFactory'가 null의 호출 정적합니다? –

+2

MonsterFactory 및 getMonster 메서드를 정적으로 선언해야합니다. –

+0

@DavidBrabant David, 고맙습니다. –

답변

0

변경 GetMonster 방법은 Main 방법에서

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

private IMonster monster; 

void Start() 
{ 
    monster = MonsterFactory.GetMonster(); 
} 
관련 문제