产生不同类型动物的最佳方法?

时间:2018-08-24 12:27:07

标签: c# unity3d

我有一个名为Animal的基类和一些继承自它的子类。例如,类CowPigChicken等。

现在,我想在我的世界(游戏​​对象)中生成动物。我应该为每个子类创建一个生成方法,还是在基类Animal中仅创建一个方法。如果我在Animal中创建方法,什么是引用我的动物的最佳方法。我应该使用预制件吗?

如何在Spawn(some parameter here)中创建一个Animal方法,例如可以生成Pig

2 个答案:

答案 0 :(得分:0)

如果要使用方法来处理动物创建对象,我将使用工厂模式来处理动物创建对象。

创建一个enum AnimalType作为您的方法参数,它可以拆分让用户决定用户想要哪种动物。

public enum AnimalType { PIG, Cow, Chicken }
public abstract class Animal { }
public class Pig : Animal { }
public class Cow : Animal { }
public class Chicken : Animal { }

有一个Dictionary<AnimalType, Animal>AnimalType对象注册Animal映射器。

public class AnimalFacotry 
{
    Dictionary<AnimalType, Animal> _dict;
    public AnimalFactory() 
    {
        _dict = new Dictionary<AnimalType, Animal>();
        _dict.Add(AnimalType.PIG, new Pig());
        _dict.Add(AnimalType.Chicken, new Chicken());
        _dict.Add(AnimalType.Cow, new Cow());
    }
    public Animal Spawn(AnimalType type)
    {
        if (_dict.ContainsKey(type))
            return _dict[type];
        return null;
    }
}

使用此工厂时,仅以enum类型传递Spawn,您想要获得哪种动物。

var factory = new AnimalFacotry();
Animal cow  = factory.Spawn(AnimalType.Cow);

如果将来您将添加更多Animal类,您只需在enumDictionary中注册新动物即可。

工厂模式可以解决创建对象的问题,而不必指定将要创建的对象的确切类,因为所有动物都继承自Animal类。

答案 1 :(得分:-1)

这里的想法是设置一个Export变量,它可以是一个GameObjects数组,可以是每种动物的预制件。 然后,您可以选择随机执行(生成一个介于0和数组长度之间的数字)或选择数组的一个位置。 然后,您只需选择位置。如果其与生成点相同的空对象,则只需要: Instantiate(theArray[position],transform.position,transform.rotation) 很高兴我对您有用