- Home /
Unity style component system in C++
Hi. I'm sorry if this isn't the best place to post this. I just figured I'd get the best answers here because everyone already knows how Unity works.
I've been writing a 3D component based game engine in C++. Since I've grown to love Unity, I've made my game engine work the same way with components. Currently I have a class Component, which all components inherit from. My GameObject class has a vector of Component pointers, which can hold any type of component. I also have template AddComponent() and GetComponent() functions, which you only pass the type to, and the GameObject creates the new component and adds it to the vector. They currently work just as they do in Unity. It also supports user created components, without having to change anythjng. The only thing is for the GetComponent() function I have to compare the type_info of the types, which I heard is ugly and shouldn't be done?
So I was wondering, is that a good way to make a component system like Unity's in C++? Or can anybody think of a better way? I'm making a lot of progress on my engine now. It would be easier to change it now than later on
Answer by peterpi · Nov 11, 2013 at 11:16 AM
If you were comparing type_info
, it would be difficult to say something like GetComponent<Collider>
where there might be several subclasses of Collider
that you may want to include in your search.
An alternative might be to try doing a dynamic_cast
on each Component
to the target type.
People might tell you that type_info
and dynamic_cast
are both ugly because they both use runtime type identification (RTTI). This is considered ugly by some because, depending on your compiler, you have the option of switching RTTI off for a performance benefit. Whether this is a case of premature optimization or premature pessimization on something as high-level as an object/component system is left to your judgement and particular needs.