Scene Manager

개발조하·2023년 12월 29일
0

Unity

목록 보기
19/30
post-thumbnail

1. 필요한 이유

실행버튼을 눌렀을 때 앞서 만든 UI의 생성 및 기능 구현 등을 위해 지금은 UnityChan에 붙어있는 PlayerController.Start()에 코드를 작성하여 기능을 구현했다.

하지만 RPG게임의 경우 Player캐릭터가 없는 순간이 있을 수도 있기 때문에 Player의 스크립트 컴포넌트에서 코드를 실행하는 것은 적합하지 않다..!

=> 이처럼 씬에 필수적인 기능들을 구현하는 코드를 관리하는 Scene Manager가 필요하다.

2. Scene 관리 스크립트

RPG에 필요한 여러 씬들을 관리하기 위해 먼저 Define.cs에 enum타입으로 씬이름을 정의해준다.

그리고 GameScene 씬과 LoginScene 씬을 만들어준다.

2.1 BaseScene.cs

씬관련 스크립트에서 상속받아서 사용할 가장 기본적인 BaseScene.cs를 생성한다.

2.2 GameScene.cs

기존에 PlayerController.cs의 Start()에서 실행해줬던 인게임의 초기설정을 GameScene.Init()으로 옮긴다.
ㄴ GameScene.cs는 BaseScene.cs를 상속받는다.

  • 하이어라키에 빈게임오브젝트로 @Scene 오브젝트를 만들고, GameScene.cs를 붙인다.

2.3 LoginScene.cs

3. EventSystem 프리팹화

UI의 이벤트 기능을 사용하기 위해서는 EventSystem이 필수적이다.
하이어라키에서 UI 오브젝트를 생성하면 자동으로 EventSystem이 만들어지지만,
EventSystem이 없는 씬이 있다면 별도로 만들어줘야 하는 번거로움이 생긴다.

이때, EventSystem을 미리 프리팹화하여 BaseScene.Init()에서 자동으로 생성되도록 하게 만들어주면 편리하다.

4. 씬 이동

  • Login씬에서 Q키를 누르면 Game씬으로 넘어가는 로직
    ㄴSceneManager 클래스는 Unity에서 제공한다.

💡 Build Setting에서 씬이 다 등록되어있어야 한다!!

-> Login 씬에서 실행 후 Q키를 누르면 Game씬으로 전환되는 것을 확인할 수 있다!

5. SceneManagerEx.cs 생성

Login씬에서 Game씬으로 전환되면 Login씬이 삭제되고, Game씬의 환경이 만들어진다. 규모의 Game씬일 경우 로딩 시간이 길어지게 된다. 이를 방지하기 위해 SceneManagerEx.cs를 생성하여 씬을 관리한다.
(SceneManager는 이미 유니티에서 제공하는 클래스이기 때문에 이름 중복 충돌을 피하고자 SceneManagerExtended라는 의미의 SceneManagerEx를 사용한다)

  • 먼저 Managers.cs에 SceneManagerEx를 등록해준다.

  • Scene관련 스크립트들의 유기적 관계
    SceneManagerEx가 모든 씬들의 선봉장인 BaseScene을 관리하고, BaseScene의 상속을 받아서 각각의 씬들이 기능을 구현한다.

📄참고자료
[인프런] c#과 유니티로 만드는 MMORPG 게임 개발 시리즈_3. 유니티 엔진

profile
Unity 개발자 취준생의 개발로그, Slow and steady wins the race !

0개의 댓글