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

Tol*_*nko 5 c++ components unity-game-engine

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

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

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

统一描述说,它是缓慢的,但为什么呢?我可以想象它可能是使用动态转换的数组搜索。我正在考虑使用 实现此功能unordered_multimap,但这会使查找基类的用例变得更加困难。

让开发人员在其实现上调用宏对我来说是不正确的。用户必须可以无障碍地自由编码。

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

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