위키북스 출판사 이재현 저자님의 '절대강좌! 유니티' 책을 참고하여 필기한 내용입니다.
지금까지 진행한 씬을 분리할 예정!
씬을 분리하는 이유는 협업 시 분야별로 분리하여 개발을 진행한 후 합치기 때문
UI 개발자, 레벨 디자이너, 메인 개발자 세명이 함께 분야별로 개발을 진행하고 구동하기 전에는 합쳐서 실행함
Scene 분리
STAGE 안에 SpawnPointGroup 오브젝트를 하위로 넣기 그리고 Ctrl + S "저장하기"
Play 씬을 복제하고 이름은 Play_backup으로 변경
하나 더 복제하여 이름은 Level_01 으로 변경
Play 씬에서 STAGE 오브젝트는 삭제하기
이렇게 되면 씬에는 플레이어와 UI만 남게 되는데 이게 게임 로직 부분이 됨
Level_01 씬에서는 STAGE 오브젝트만 남겨 놓고 나머진 다 삭제하기
Scene 병합
UIManager.cs
using UnityEngine;
using UnityEngine.UI; // Unity-UI를 사용하기 위해 선언한 네임스페이스
using UnityEngine.Events; // UnityEvent 관련 API를 사용하기 위해 선언한 네임스페이스
using UnityEngine.SceneManagement; // SceneManager를 사용하기 위해 선언한 네임스페이스
public class UIManager : MonoBehaviour
{
// 버튼을 연결할 변수
public Button startButton;
public Button optionButton;
public Button shopButton;
private UnityAction action;
private void Start()
{
// UnityAction 을 사용한 이벤트 연결 방식
action = () => OnStartClick();
startButton.onClick.AddListener(action);
// 무명 메서드를 활용한 이벤트 연결 방식
optionButton.onClick.AddListener(delegate { OnButtonClick(optionButton.name); });
// 람다식을 활용한 이벤트 연결 방식
shopButton.onClick.AddListener(() => OnButtonClick(shopButton.name));
}
public void OnButtonClick(string msg)
{
Debug.Log($"Click Button : {msg}");
}
public void OnStartClick()
{
SceneManager.LoadScene("Level_01");
SceneManager.LoadScene("Play", LoadSceneMode.Additive);
}
}
메서드 | 설명 |
CreateScene | 새로운 빈 씬을 생성 |
LoadScene | 씬의 이름 또는 인덱스 번호로 씬을 로드 |
LoadSceneAsync | 씬을 비동기 방식으로 로드 |
MergeScenes | 소스 씬을 다른 씬으로 통합한다. 소스 씬은 모든 게임오브젝트가 통합된 이후 삭제 |
MoveGameObjectToScene | 현재 씬에 있는 특정 게임오브젝트를 다른 씬으로 이동 |
UnloadScene | 현재 씬에 있는 모든 게임오브젝트를 삭제 |
LoadScene 함수는 새로운 씬을 호출하는 함수로 "Level_01"을 먼저 로드한후 Play 씬을 추가로 로드함
두번째 인자는 씬을 로드할 때의 옵션으로 단독 씬으로 로드할지 또는 앞서 로드된 화면에 추가로 로드할지를 결정
- LoadSceneMode.Single : 기존에 로드된 씬을 모두 삭제한 후 새로운 씬을 로드
- LoadSceneMode.Additive : 기존 씬을 삭제하지 않고 추가해서 새로운 씬 생성
public void OnStartClick()
{
SceneManager.LoadScene("Level_01");
SceneManager.LoadScene("Play", LoadSceneMode.Additive);
}
OnStartClick 은 START 버튼을 클릭했을 때 호출할 함수이므로 Start 함수의 이벤트에 연결함
private void Start()
{
// UnityAction 을 사용한 이벤트 연결 방식
action = () => OnStartClick();
startButton.onClick.AddListener(action);
// 무명 메서드를 활용한 이벤트 연결 방식
optionButton.onClick.AddListener(delegate { OnButtonClick(optionButton.name); });
// 람다식을 활용한 이벤트 연결 방식
shopButton.onClick.AddListener(() => OnButtonClick(shopButton.name));
}
실행하게 되면 호출하려는 씬이 없다는 메세지가 뜨며 오류가 발생하게 됨
File - Build Settings 을 선택하여 씬을 드래그 드롭하기
게임을 실행하게되면 최상단에 위치한 씬이 가장 먼저 보이게 되고 두번째 이후 씬은 의미가 없음
추가한 씬은 Delete 키로 삭제할 수 있고 원하는대로 드래그하여 위치를 변경할 수 있음
실행해서 Start 버튼을 누르게 되면 세개의 씬이 로드되는 것을 확인할 수 있다.
DontDestroyOnLoad 는 GameManager 를 싱글턴으로 구현했기 때문에 자동으로 생성된 씬
멀티 씬 에디트 기능
프로젝트 개발 시작과 동시에 씬을 분리한 상태로 작업할 경우에 유니티의 멀티 씬 에디트 기능을 사용하여 더 편리하게 개발 할 수 있음 하이러키 뷰의 여러 개 씬을 로드한 상태로 작업이 가능
'Unity 강의 > Unity Course(2) - 절대강좌! 유니티' 카테고리의 다른 글
[Unity Course 2] 14. Input System - 새로운 Input System의 특징 (0) | 2024.06.29 |
---|---|
[Unity Course 2] 13. 오클루전 컬링 (0) | 2024.06.29 |
[Unity Course 2] 11. 라이트매핑 및 라이트 프로브 2 (0) | 2024.06.28 |
[Unity Course 2] 11. 라이트매핑 및 라이트 프로브 (0) | 2024.06.26 |
[Unity Course 2] 10. 내비게이션 고급 기법 (0) | 2024.06.26 |