我在“统一”中设置对象时遇到了问题,但我认为以下最能说明我的问题。
我有一个羊类型的对象,它是动物类型的子类。我也有一个类蛇,我可能需要在未来,也是一个子类的动物。绵羊或蛇一次可能在游戏中,它们被标记为PlayerAnimal。它足够简单,以获得访问谁是在发挥作用。例如,我实例化了一只绵羊,并使用以下方法获取它:
var player = (GameObject.FindWithTag ("PlayerAnimal"));我可以用player.transform来移动羊。但我的问题是,玩家的行为不像GameObject,动物,或羊/蛇。我想使播放器闪光灯白色或透明,但我不能访问它的材料/网格/等等,因为它显然不是一个GameObject。我不能访问动物或羊/蛇的任何功能,因为它也不是那样的。
如果我想把玩家换成羊或者动物..。
Sheep newSheep = player;我得到:
不能隐式地将类型UnityEngine.GameObject转换为动物
如果我想把它演成羊或动物..。
Sheep newSheep = player as Sheep;我得到了
无法通过内置转换将“UnityEngine.GameObject”转换为“绵羊”。
发布于 2015-05-10 02:00:59
使用GetComponent()
var sheep = GameObject.FindWithTag("PlayerAnimal").GetComponent<Sheep>();如果您的所有动物都继承了基类Animal,并且不需要访问除Animal类中可用的属性之外的任何特定属性,请使用以下方法:
var animal = GameObject.FindWithTag("PlayerAnimal").GetComponent<Animal>();如果您需要某种特定的动物的东西,我想您将不得不测试这种类型:
if (animal is Sheep)
{
// access some sheepy property like wool color
}
else if (animal is Snake)
{
// access some snakey property like slitherinessability
}
else if (...)
...https://stackoverflow.com/questions/30146897
复制相似问题