Unity的Object.FindObjectOfType <t>()如何工作?

时间:2018-04-05 17:18:58

标签: c++ unity3d components

为了创建一个受Unity3d启发的游戏引擎,我想扩展一个关于Unity FindObjectsOfType<T>()如何工作Unity's GetComponent works的问题。

应该返回指向场景中存在的<T>对象的所有指针。

我知道Unity用C ++实现它,但是怎么样?对象可以是Unity中的任何东西,Unity的解决方案可以容忍继承。

Unity Description说它很慢,但为什么呢?我可以想象它可能是使用动态强制转换的数组搜索。我正在考虑使用unordered_multimap实现此功能,但它将使查找基类的用例更难。

让开发人员在其实现上调用宏感觉不对。用户必须可以自由编码无摩擦。

另一个问题是:谁是考虑到这一点的智能指针的拥有者:

  • 对象必须按照描述返回查找操作。
  • GameObject有自己的GetComponents<T>()实现,其中Component也是Object。

1 个答案:

答案 0 :(得分:0)

这是假设因为我没有深入研究源代码。

考虑一个场景有一个活动对象列表。 在该列表中,迭代每个GameObject。每个游戏对象很可能都有一个组件列表。迭代该列表以检查每个组件是否属于类型(后缀转换),如果是,则返回组件。

您完成了,因为该方法返回该类型的第一个活动对象。

他们可能必须更快地运行,但它很慢,因为你可能会运行整个集合而找不到任何东西。