在Gameobject上获取派生类型的属性

时间:2015-11-03 12:41:14

标签: c# linq reflection unity3d

所以我在我的场景中有几个代表不同演员的游戏对象。此外,我为每种类型的actor都有脚本,它们都来自Actor脚本。

public class Actor : MonoBehaviour {

//some properties

}

/// 

public class Doctor : Actor {

//some more properties 

}

只有派生的脚本会附加到游戏对象上。即如果我有一个医生游戏对象 - 只有Doctor脚本在检查员中附加到它。

我的代码遍历所有这些actor游戏对象 - 并从某些数据输入更新其属性(base + derived)。 目前我正在检查每个游戏对象是否具有特定组件,然后从正确的脚本中获取属性。

我的目标是始终从Actor获取派生类声明的属性,该属性当前附加到游戏对象,而不查找该组件。 我认为Linq会有所作为。

1 个答案:

答案 0 :(得分:0)

听起来像你想要GetComponent<Actor>()GetComponents<Actor>()FindObjectsOfType(typeof(Actor))

  • GetComponent搜索单个GameObject并返回第一个匹配的组件,如果没有找到这样的组件,则返回null。
  • GetComponents搜索单个GameObject并返回所有匹配组件的数组,如果没有找到这样的组件,则返回一个空数组。
  • FindObjectsOfType搜索整个场景并返回所有匹配的Unity对象的数组,如果没有找到这样的对象,则返回一个空数组。最后一次通话相当昂贵,但全场景搜索确实有其用途。

搜索Actor个组件也会找到Doctor个组件,因为根据定义,每个Doctor都是Actor