C# Can';t使用FindWithTag找到的对象中的访问方法

C# Can';t使用FindWithTag找到的对象中的访问方法,c#,unity3d,C#,Unity3d,我在统一中铸造对象时遇到了问题,但我认为以下内容最能说明我的问题 我有一个绵羊类型的对象,它是动物类型的一个子类。我也有一个类蛇,我可能需要在未来,也是动物的一个子类。绵羊或蛇一次可能在游戏中,它们被标记为PlayerAnimal。它非常简单,可以访问任何正在进行的操作。例如,我实例化了一只绵羊,并用以下内容抓取它: var player = (GameObject.FindWithTag ("PlayerAnimal")); 我可以使用player.transform来移动羊。但我的问题是,

我在统一中铸造对象时遇到了问题,但我认为以下内容最能说明我的问题

我有一个绵羊类型的对象,它是动物类型的一个子类。我也有一个类蛇,我可能需要在未来,也是动物的一个子类。绵羊或蛇一次可能在游戏中,它们被标记为PlayerAnimal。它非常简单,可以访问任何正在进行的操作。例如,我实例化了一只绵羊,并用以下内容抓取它:

var player = (GameObject.FindWithTag ("PlayerAnimal"));
我可以使用player.transform来移动羊。但我的问题是,玩家的行为不像游戏对象、动物或绵羊/蛇。我想让玩家的闪光灯变成白色或透明,但我无法访问它的材质/网格/等等,因为它显然不是游戏对象。我无法访问Animal或Sheep/Snake中的任何函数,因为它也不是这样

如果我想把玩家换成羊或动物

Sheep newSheep = player;
Sheep newSheep = player as Sheep;
我得到:

无法将类型UnityEngine.GameObject隐式转换为Animal

如果我试着把它变成羊或动物

Sheep newSheep = player;
Sheep newSheep = player as Sheep;
我明白了

无法通过内置转换将类型“UnityEngine.GameObject”转换为“Sheep”

使用:

如果你需要从某种特定动物身上取些东西,我想你必须测试一下类型:

if (animal is Sheep)
{
    // access some sheepy property like wool color
}
else if (animal is Snake)
{
    // access some snakey property like slitherinessability
}
else if (...)
...

这是可行的,但我想我的主要问题是,我使用的代码是什么,
var player=(GameObject.FindWithTag(“PlayerAnimal”)正在被处理为?或者我怎么知道?据我所知,它无法访问GameObject方法。澄清一下:如果我事先知道羊会在游戏中,那么你的代码就是完美的。但我之所以使用“PlayerAnimal”标签,是因为我无法事先知道它是绵羊、蛇还是无数其他动物中的任何一种。一旦我控制了对象,一切都很好,因为它们都继承自动物并共享功能,但是有没有办法
FindWithTag
并确定它是什么类型的对象?这有意义吗?我觉得这不应该起作用,但它确实起作用了。非常感谢!你解决了我几个星期来遇到的一个问题。