为了创建一个受Unity3d启发的游戏引擎,我想扩展一个关于Unity FindObjectsOfType<T>()
如何工作Unity's GetComponent works的问题。
应该返回指向场景中存在的<T>
对象的所有指针。
我知道Unity用C ++实现它,但是怎么样?对象可以是Unity中的任何东西,Unity的解决方案可以容忍继承。
Unity Description说它很慢,但为什么呢?我可以想象它可能是使用动态强制转换的数组搜索。我正在考虑使用unordered_multimap
实现此功能,但它将使查找基类的用例更难。
让开发人员在其实现上调用宏感觉不对。用户必须可以自由编码无摩擦。
另一个问题是:谁是考虑到这一点的智能指针的拥有者:
GameObject
有自己的GetComponents<T>()
实现,其中Component也是Object。答案 0 :(得分:0)
这是假设因为我没有深入研究源代码。
考虑一个场景有一个活动对象列表。 在该列表中,迭代每个GameObject。每个游戏对象很可能都有一个组件列表。迭代该列表以检查每个组件是否属于类型(后缀转换),如果是,则返回组件。
您完成了,因为该方法返回该类型的第一个活动对象。
他们可能必须更快地运行,但它很慢,因为你可能会运行整个集合而找不到任何东西。