【发布时间】: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 知道我做错了什么吗?
【问题讨论】:
-
myMonsterFactory为空? -
你应该将你的 MonsterFactory 和 getMonster 方法声明为静态的。
-
@DavidBrabant 谢谢大卫,我把它修好了。
标签: c# design-patterns abstract-factory