2015-05-10 62 views
1

我在Unity中投射對象時出現問題,但我認爲以下內容最能說明我的問題。無法訪問使用FindWithTag找到的對象中的方法

我有一個Sheep類型的對象,它是Animal類型的子類。我還有一個我將來可能需要的蛇類,也是動物的一個子類。一次可以使用綿羊或蛇,並且它們被標記爲玩家動物。這很簡單,可以訪問任何正在使用的遊戲。舉例來說,我已經實例化的羊,我用下面的搶吧:

var player = (GameObject.FindWithTag ("PlayerAnimal")); 

我可以用player.transform四處移動羊。但我的問題是玩家不會像GameObject,Animal或Sheep/Snake一樣行事。我想讓播放器閃爍白色或透明,但我無法訪問其材質/網格/等,因爲它顯然不是GameObject。我無法訪問Animal或Sheep/Snake中的任何函數,因爲它們都不是。

如果我試圖改變球員的羊或動物......

Sheep newSheep = player; 

我得到:

無法隱式轉換類型UnityEngine.GameObject到動物

如果我試圖將它作爲綿羊或動物......

Sheep newSheep = player as Sheep; 

我得到

無法通過內置的轉換

回答

2

使用GetComponent()轉換型 'UnityEngine.GameObject' 到 '羊':

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 (...) 
... 
+0

這樣的作品,但我想我的主要問題,那麼,我使用的代碼是什麼,'var player =(GameObject.FindWithTag(「PlayerAnimal」));'被處理爲?或者我怎麼知道?據我所知,它無法訪問GameObject方法。 – greyspace

+0

澄清:如果我事先知道羊將在場,你的代碼是完美的。但是我使用「PlayerAnimal」標籤的原因是,我不能預先知道它是羊,蛇還是任何數量的無數其他動物。一旦我控制了對象,就沒事了,因爲它們都繼承了Animal並且共享了函數,但是有沒有辦法找到'FindWithTag'並確定它後面是什麼類型的對象呢?那有意義嗎? – greyspace

+0

做'GetComponent ()'工作嗎?或者您是否還需要訪問每種動物的特定屬性? –