C# 在unity中使用addComponent而不是new关键字
我有一个所有怪物都应该实现的界面C# 在unity中使用addComponent而不是new关键字,c#,unity3d,C#,Unity3d,我有一个所有怪物都应该实现的界面 namespace Assets.Scripts { interface IMonster { void setSpeed(float s); float getSpeed(); void SetMonsterPosition(Vector2 pos); Vector2 GetMonsterPosition(); void DestroyMonster();
namespace Assets.Scripts
{
interface IMonster
{
void setSpeed(float s);
float getSpeed();
void SetMonsterPosition(Vector2 pos);
Vector2 GetMonsterPosition();
void DestroyMonster();
void MoveMonster();
}
}
然后我有一个具体的怪物类(我将添加更多):
还有一个工厂类,可以生产我的怪物:
class MonsterFactory : MonoBehaviour
{
public static IMonster getMonster()
{
return new Monster2();
}
}
这是可行的,但我读到我不应该使用new,而应该使用AddComponent。所以我尝试了以下方法:
class MonsterFactory : MonoBehaviour
{
public static GameObject mymonster; //@first
public static IMonster getMonster()
{
return mymonster.AddComponent<Monster2>(); //@second
}
}
正如David所说,mymonster需要初始化。但即使这样,你也会遇到麻烦,因为有一个
GameObject
包含一堆Monster2
组件
因此,我建议:
GameObject go = new GameObject (GameObjectName);
return go.AddComponent<Monster2>();
GameObject go=新的GameObject(GameObjectName);
返回go.AddComponent();
现在每个新怪物都有自己的游戏对象,因此可以独立移动。正如大卫所说的
mymonster
需要初始化。但即使这样,你也会遇到麻烦,因为有一个GameObject
包含一堆Monster2
组件
因此,我建议:
GameObject go = new GameObject (GameObjectName);
return go.AddComponent<Monster2>();
GameObject go=新的GameObject(GameObjectName);
返回go.AddComponent();
现在每个新怪物都有自己的游戏对象,因此可以独立移动。正如大卫所说的
mymonster
需要初始化。但即使这样,你也会遇到麻烦,因为有一个GameObject
包含一堆Monster2
组件
因此,我建议:
GameObject go = new GameObject (GameObjectName);
return go.AddComponent<Monster2>();
GameObject go=新的GameObject(GameObjectName);
返回go.AddComponent();
现在每个新怪物都有自己的游戏对象,因此可以独立移动。正如大卫所说的
mymonster
需要初始化。但即使这样,你也会遇到麻烦,因为有一个GameObject
包含一堆Monster2
组件
因此,我建议:
GameObject go = new GameObject (GameObjectName);
return go.AddComponent<Monster2>();
GameObject go=新的GameObject(GameObjectName);
返回go.AddComponent();
现在每个新怪物都有自己的游戏对象,因此可以独立移动