我有一个名为Animal
的基类和一些继承自它的子类。例如,类Cow
,Pig
,Chicken
等。
现在,我想在我的世界(游戏对象)中生成动物。我应该为每个子类创建一个生成方法,还是在基类Animal
中仅创建一个方法。如果我在Animal
中创建方法,什么是引用我的动物的最佳方法。我应该使用预制件吗?
如何在Spawn(some parameter here)
中创建一个Animal
方法,例如可以生成Pig
?
答案 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
类,您只需在enum
和Dictionary
中注册新动物即可。
工厂模式可以解决创建对象的问题,而不必指定将要创建的对象的确切类,因为所有动物都继承自Animal
类。
答案 1 :(得分:-1)
这里的想法是设置一个Export变量,它可以是一个GameObjects数组,可以是每种动物的预制件。
然后,您可以选择随机执行(生成一个介于0和数组长度之间的数字)或选择数组的一个位置。
然后,您只需选择位置。如果其与生成点相同的空对象,则只需要:
Instantiate(theArray[position],transform.position,transform.rotation)
很高兴我对您有用