【问题标题】:Object reference is not set to an object when try to implement abstract factory尝试实现抽象工厂时未将对象引用设置为对象
【发布时间】:2014-03-03 07:24:39
【问题描述】:

我正在使用 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;
    }

    ....

}

我想创建一个 Factory 类,它有一个返回新 Monster 对象的方法,这样我以后就可以随机创建具体的 Monster 对象。我写了以下内容:

 class MonsterFactory
    {

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

我正在尝试像这样在我的 main 中使用这个工厂:

 private IMonster monster;
    private MonsterFactory myMonsterFactory;

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

当我尝试运行游戏时,我收到以下错误 NullReferenceException: Object reference not set to an instance of an object 知道我做错了什么吗?

【问题讨论】:

标签: c# design-patterns abstract-factory


【解决方案1】:

MonsterFactory 类中的GetMonster 方法更改为静态

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

在您的Main 方法中调用它

private IMonster monster;

void Start() 
{
    monster = MonsterFactory.GetMonster();
}

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多