지난 48 시간 동안 Object Component 시스템을 읽었으며 구현을 시작할 준비가되었다고 생각합니다. 기본 Object 및 Component 클래스를 만들었지 만 실제 구성 요소를 작성해야하므로 혼란 스럽습니다. HealthComponent 또는 기본적으로 속성 일 것이라고 생각할 때 완벽하게 이해됩니다. 물리 / 그래픽 구성 요소보다 일반적인 것이면 약간 혼란스러워집니다.
내 Object 클래스는 지금까지와 같이 보입니다 (변경 사항을 발견하면 알려주세요. 여전히 새로운 내용입니다).
typedef unsigned int ID;
class GameObject
{
public:
GameObject(ID id, Ogre::String name = "");
~GameObject();
ID &getID();
Ogre::String &getName();
virtual void update() = 0;
// Component Functions
void addComponent(Component *component);
void removeComponent(Ogre::String familyName);
template<typename T>
T* getComponent(Ogre::String familyName)
{
return dynamic_cast<T*>(m_components[familyName]);
}
protected:
// Properties
ID m_ID;
Ogre::String m_Name;
float m_flVelocity;
Ogre::Vector3 m_vecPosition;
// Components
std::map<std::string,Component*> m_components;
std::map<std::string,Component*>::iterator m_componentItr;
};
이제 내가 겪고있는 문제는 일반 인구가 물리 / 그래픽과 같은 구성 요소에 넣는 것입니까? Ogre (내 렌더링 엔진)의 경우, 보이는 오브젝트는 장면에 부착하기 위해 여러 개의 Ogre :: SceneNode (아마도 여러 개)로 구성되며, 보이는 메시를 표시하기 위해 Ogre :: Entity (아마도 여러 개) 등으로 구성됩니다. Object에 여러 GraphicComponent를 추가하고 각 GraphicComponent가 하나의 SceneNode / Entity를 처리하도록하는 것이 가장 좋습니까? 아니면 각 Component 중 하나를 필요로하는 아이디어입니까?
물리학의 경우 더욱 혼란스러워합니다. RigidBody를 생성하고 질량 / interia / 등을 추적한다고 가정합니다. 말이 될 것입니다. 그러나 실제로 구성 요소에 세부 정보를 넣는 방법을 생각하는 데 문제가 있습니다.
이러한 "필수"구성 요소가 완성되면 훨씬 더 의미가 있다고 생각합니다. 현재로서는 여전히 조금 혼란스러워합니다.