게임 객체들을 관리하는 하나의 클래스
프레임마다 모든 객체들을 순회하며 업데이트 시킴
class Scene
{
public:
void Awake();
void Start();
void Update();
void LateUpdate();
...
private:
vector<shared_ptr<GameObject>> _gameObjects;
};
여기서는 하나의 vector로 구현하였지만, 유니티에서는 레이어마다 vector를 만들어
검색을 보다 빠르게 할 수 있도록 함
SceneManager
void SceneManager::Update()
{
...
_activeScene->Update();
_activeScene->LateUpdate();
}
void SceneManager::LoadScene(wstring sceneName)
{
...
_activeScene->Awake();
_activeScene->Start();
}
Scene들을 관리하며 객체들이 적절한 때에 불려 쓰일 수 있도록 함
싱글턴 패턴 매크로
#define DECLARE_SINGLE(type) \
private: \
type() {} \
~type() {} \
public: \
static type* GetInstance() \
{ \
static type instance; \
return &instance; \
} \
class SceneManager
{
DECLARE_SINGLE(SceneManager)
public:
...
};
void Game::Init(const WindowInfo& info)
{
GEngine->Init(info);
GET_SINGLE(SceneManager)->LoadScene(L"TestScene");
}
void Game::Update()
{
GEngine->Update();
}
void Engine::Render()
{
RenderBegin();
GET_SINGLE(SceneManager)->Update();
RenderEnd();
}
게임에서는 Scene을 불러오면 엔진이 해당 Scene을 프레임마다 업데이트