Scene

ㅋㅋ·2022년 7월 19일
0

DirectX12강의

목록 보기
13/39

게임 객체들을 관리하는 하나의 클래스

프레임마다 모든 객체들을 순회하며 업데이트 시킴

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을 프레임마다 업데이트

0개의 댓글