2015-11-03 89 views
0

所以我在我的場景中有幾個代表不同演員的gameobjects。另外,我有針對每種類型演員的腳本,它們都來自「演員」腳本。在Gameobject上獲得派生類型的屬性

public class Actor : MonoBehaviour { 

//some properties 

} 

/// 

public class Doctor : Actor { 

//some more properties 

} 

只有派生腳本附加到gameobjects。即如果我有醫生gameobject - 只有'醫生'腳本附加到它在檢查員。

我的代碼貫穿所有這些演員gameobjects - 並從一些數據輸入更新其屬性(基+派生)。 當前即時檢查每個gameobject,如果他有特定的組件,然後從正確的腳本獲取屬性。

我的目標是始終從'Actor'派生類聲明的屬性,即當前連接到遊戲對象,而不查找組件。 我會認爲Linq會有所斬獲。

+1

不清楚。醫生增加了一些新的屬性擴展演員,你想只得到博士定義的那些? –

+0

[使用反射來獲得班'屬性](http://stackoverflow.com/a/737156/2140173) – 2015-11-03 12:52:52

+0

基本上是的。 @OguzOzgul。所以我想交叉檢查一個組件是否滿足2件事:1-被附加到遊戲對象上,2-從演員衍生出來 – mihaa123

回答

0

聽起來像你想GetComponent<Actor>()GetComponents<Actor>()FindObjectsOfType(typeof(Actor))

  • GetComponent搜索單個GameObject並返回第一個匹配組件,如果沒有找到此組件,則返回null。
  • GetComponents搜索單個GameObject並返回一個包含所有匹配組件的數組,或者如果找不到這樣的組件,則返回一個空數組。
  • FindObjectsOfType搜索整個場景並返回一個包含所有匹配的Unity對象的數組,如果沒有找到這樣的對象,則返回一個空數組。這最後一次通話相當昂貴,但全場搜索確實有用。

搜索Actor組件還會發現Doctor成分,因爲每Doctor是通過定義一個Actor

+0

事情是我得到了幾個演員派生出'演員'類型。當我找到1我​​不想檢查它是哪種類型,我想立即得到屬性列表。只要它是從「actor」派生出來的並附加到一個gameobject上,我就想要它的屬性。有了GetComponent,我需要指定組件的屬性,我想要得到。 – mihaa123

+0

這聽起來像一個不尋常的設計選擇,但你可以[使用反射來獲得對象的所有屬性](http://stackoverflow.com/questions/737151/how-to-get-the-list-of-properties-對的一類)。 – rutter