2015-11-03 91 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