GameEngine에서 필수 코어 클래스란 GameObject, Resources 등을 말한다.

이 필수 코어 클래스를 관리하기 위해서는 해당되는 컨테이너를 선택해서 GameEngine의 구조를 구성해야 한다.

 

그 이유는 전체 게임 엔진 프로세스 중에 각각의 중요한 기능 호출에서 발생한

실제 동작(단일 항목 검색, 삽입/삭제, 트래버스)에 근거해야 한다.

 

먼저 엔진에서 모듈 구성과 순서는 다음과 같다.

여기서 엔진에서 렌더러 모듈로 데이터를 넘겨줘야 하는데 그것에 필요한 데이터는 무엇인가?

게임엔진에서 관리해야하는 데이터는 다음과 같다.

리소스 매니저에는 리소스, 리소스에는 데이터, 경로, 키, 타입이 존재한다.

(여기서 타입은 Mesh, Texture, Prefab을 의미한다.)

 

씬 매니저에는 게임 오브젝트, 게임 오브젝트에는 트랜스폼이 존재한다.

 

이 데이터들을 각각 어떤 컨테이너를 사용해서 구현을 해야 할지 생각해봐야 한다.

사용 할 컨테이너는 다음과 같다.

 

Map

Unordered_Map(Hash Map)

Vector

 

Map에서는 정렬은 빠르지만 속도는 느리다는 단점이 있고,

Unordered_Map에서는 속도는 빠르지만 정렬되지 않는다는 단점이 있다.

Vector는 메모리에 데이터가 순차적으로 저장되어있기 때문에 효율적으로 요소 조회가 가능하다.

 

  • 씬 매니저와 리소스 매니저에서는 어떤 컨테이너를 사용해야 좋을까?

게임의 실행 구도를 살펴보면 씬로딩 -> 리소스 로딩 -> 렌더링처리 순으로 실행이 된다.

 

씬 매니저에서는 Vector를 사용해야 한다고 생각한다.

 

그 이유는

렌더링 처리를 하려면 처음부터 끝까지 다 돌아야 하기 때문에 성능 부분을 고려한다면

어쩔 수 없이 Vector를 사용해야 하기 때문이다. 

 

그렇다면 리소스 매니저는 어떤 컨테이너를 사용해야 좋을까?

 

어떤 게임 오브젝트가 있을 때 리소스에 대한 것은 리소스 매니저가 가지고 있다.

 

씬 매니저에서 Vector를 사용한다면 이 게임 오브젝트는 Vector로 관리가 되고 있기 때문에

처음부터 끝까지 순차적으로 로딩을 하게 된다.

 

순차적으로 로딩이 되는 과정에서 리소스 매니저는 리소스의 키값을 가지고 가서 빼오게 되는데,

이 부분에서는 따로 정렬이 될 필요가 없다고 생각해서 씬 매니저와 같이 Vector를 사용해야 한다고 생각한다.

 

왜냐하면 특정 아이템을 보여주는 것이 아닌 처음부터 끝까지 다 보여줘야 되는 것이기 때문이다.

 

따라서 리소스 매니저는 정렬이 의미가 없기 때문에 에디터 인터페이스까지 감안하면 Vector를 사용해야 좋지만,

만약 리소스를 검색하는 용도로만 사용을 하는 것이면 Unordered_Map이 더 좋다고 생각한다.

+ Recent posts