Executing Components in an Entity Component System
Posted
by
John
on Game Development
See other posts from Game Development
or by John
Published on 2014-08-20T22:23:07Z
Indexed on
2014/08/20
22:34 UTC
Read the original article
Hit count: 369
Ok so I am just starting to grasp the whole ECS paradigm right now and I need clarification on a few things. For the record, I am trying to develop a game using C++ and OpenGL and I'm relatively new to game programming. First of all, lets say I have an Entity class which may have several components such as a MeshRenderer,Collider etc. From what I have read, I understand that each "system" carries out a specific task such as calculating physics and rendering and may use more that one component if needed. So for example, I would have a MeshRendererSystem act on all entities with a MeshRenderer component. Looking at Unity, I see that each Gameobject has, by default, got components such as a renderer, camera, collider and rigidbody etc. From what I understand, an entity should start out as an empty "container" and should be filled with components to create a certain type of game object. So what I dont understand is how the "system" works in an entity component system.
http://docs.unity3d.com/ScriptReference/GameObject.html
So I have a GameObject(The Entity) class like
class GameObject
{
public:
GameObject(std::string objectName);
~GameObject(void);
Component AddComponent(std::string name);
Component AddComponent(Component componentType);
};
So if I had a GameObject to model a warship and I wanted to add a MeshRenderer component, I would do the following:
warship->AddComponent(new MeshRenderer());
In the MeshRenderers constructor, should I call on the MeshRendererSystem and "subscribe" the warship object to this system? In that case, the MeshRendererSystem should probably be a Singleton("shudder"). From looking at unity's GameObject, if each object potentially has a renderer or any of the components in the default GameObject class, then Unity would iterate over all objects available. To me, this seems kind of unnecessary since some objects might not need to be rendered for example. How, in practice, should these systems be implemented?
© Game Development or respective owner