Scene Management 씬 관리에 대해서 먼저 알아보자
씬 관리는 공간 분할 기법을 의미하는 말로
렌더링 효율성과 대규모 월드 관리를 위해 필수적으로 알아야하는 프로그래밍 기법이다.
DirectX 자체는 그래픽스 API 이기 때문에 자동으로 분할을 해주지 않기에 개발자가 직접 시스템을 구현해야 한다.
현재 실습하고 있는 창은 분할 관리를 해줘도 크게 효율이 나지는 않으나 넓은 게임 월드에서는 씬 전체를 한 번에 렌더링하지 않고
카메라 시야 즉 사용자 시점에서 들어오는 부분만 선택적으로 렌더링 하여 성능을 크게 올려주게 된다.
또한 이러한 효율 외에도 게임 오브젝트들을 계층적 데이터 구조로 구성해 효율적인 관리를 하기에도 용이하게 해준다.
부모 - 자식 관계를 통한 변환(이동, 회전, 크기)를 상속하여 렌더링 순서나 특정 작업을 효율적으로 적용할 수 있으며
선형 리스트가 아닌 구조화된 방식으로 관리해 특정 조건에 맞는 오브젝트만 빠르게 찾거나 처리하는것이 가능하게 된다.
그렇기에 현재 실습하는 부분에서는 크게 효율이 나오진 않겠으나 글쓴이는 공부를 하고 있는 입장이기에 구현을 하여 정리하였다.
우선 Manager파일을 하나 만들고 그 안에 SceneManager.h를 만들어 정의하는것으로 시작한다.



다음 기존에 있던 Scene.h 파일에서 씬이 바뀔때 사용할 가상함수 설정을 해준다.

그 다음 Framework에서 전역으로 사용할 씬을 가져오는 변수를 선언해준다.

그 다음 GameManager.h로 이동하여 이제 씬을 나누어 주는 작업을 해준다.
기존에 있던 Scene을 없에주고 정의한 SCENE을 이용해 호출하여 렌더한다.

위에 하나 실수한 부분이 있는데 SceneManager.h파일에서 함수들을 public으로 설정해주어야 한다.
안하면 다른 클래스에서 접근이 안되는 오류가 생긴다.
다시 본론으로 돌아와 GameManager.cpp에 있는 Scene관련 코드를 전부 SCENE-> 으로 바꿔준다.



이제 테스트를 하기 위해 Scene파일에 TitleScene.h, cpp를 만들어 새로운 화면 출력을 해보자


다시 GameManager로 이동해 설정해주고

ShootingScene에도 씬바꾸는 키를 넣어준다.

이렇게 하면 처음 프로그래밍 시작 시 Title씬으로 시작하고 f1을 누르면 게임 씬으로 이동한다.
그다음 게임 씬에서 f2를 누르면 다시 Title씬으로 이동하게 된다.
플레이를 해보면 플레이어의 위치와 적이 기억된 채로 씬이 변경이 되는데
씬을 바꿀때마다 초기화를 해주도록 하자
ShootingManager에서 Start와 End 오버라이드로 받아서 플레이어와 적, 총알에 대한 생성 소멸을 기존에 있던 것을 지워주고 새로 재정의 해준다.

이제 플레이를 해보면 정상적으로 동작하는 것을 알 수 있다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
'WinAPI' 카테고리의 다른 글
| 다시 공부 하는 Win API (9) - UI - Inventory 제작(1) (0) | 2025.12.12 |
|---|---|
| 다시 공부 하는 Win API (8) - UI 제작(1) (0) | 2025.12.10 |
| 다시 공부 하는 Win API (6) - 슈팅 게임 만들기(4) (0) | 2025.11.27 |
| 다시 공부 하는 Win API (5) - 슈팅 게임 만들기(3) (0) | 2025.11.25 |
| 다시 공부 하는 Win API (4) - 슈팅 게임 만들기(2) (0) | 2025.10.20 |