Game Engine 개발기 +4일
목표
- Component 자료구조 설정 및 구현
- File Load & Save 구현
1. Component 자료구조 설정 및 구현
- Component 종류
- Scene ( 장면 )
- 대사
- 카메라
- 오브젝트
- 쉐이더
- 오디오
- Component 종류에 따른 필요한 값들
- Scene ( 장면 )
- 해당 Scene에 들어가는 객체들에 대한 전체 정보를 지니고 있어야 함
- 대사
- 카메라
- 현재 위치( Trasformation )
- 현재 각도( Rotation )
- 현재 초점( Focus )
- 현재 초점과의 거리 ( Distance )
- 오브젝트
- 현재 위치 ( Transformation )
- 현재 각도 ( Rotation )
- 현재 크기 ( Scale )
- 현재 텍스쳐 ( Texture )
- 단순 Color인 경우, 제외
- 쉐이더
- 쉐이더 소스 파일 위치 ( HLSL file Path )
- 오디오
- Component 간의 구별
- UUID를 활용
- 단순 name을 비교
- Type으로 비교
- 동일 Type 내의 중복된 name의 경우, 비교 불가
- Component 구현
struct Component
{
UUID ID;
std::string Name;
TYPE Type;
};
std::map < Component, void* > ComponentData;
1. UUID를 기본으로 비교함
2. 하지만, map에는 Key : UUID와 매칭될 모든 객체들의 포인터가 동일하게 들어가야 함
1. 모든 객체들의 조상 인터페이스의 포인터를 사용
2. map에서 Key를 UUID와 Type 정보를 가진 객체,
value에는 해당 객체 포인터를 void 포인터로 형변환
그 후에, 해당 Type에 맞춰서 void 포인터를 객체 포인터로 변환시켜서 사용
3. 일단은 2번으로 선택하였음
3. 아니면, map에 Key : UUID와 매칭될 객체를 찾는 것이 주된 목표이기 때문에,
Value : void* or Parent* + Type 으로 구성된 객체를 설정하는 것도 괜찮을 듯
4. UUID를 Key 값으로 사용하게 되면, 나중에 Rendering을 진행하기 위해,
Object 정보가 필요할 때에도 UUID를 사용해야 한다면, 매우 불편할 수 있다.
5. Set을 이용하여서, 중복된 UUID가 없는지 확인하고,
map에 Key는 Type, Value에는 각 Type에 해당하는 Vector를 넣는 것으로 구현해보자