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();
现在每个新怪物都有自己的游戏对象,因此可以独立移动