0. 목적
유니티 3D를 통한 프로그램을 개발하다 보면 각 Scene
마다 이동해야 하는 일이 생긴다. 이번에는 Button
을 클릭했을 때, 적절한 Scene
으로 전환될 수 있도록 SceneManager
를 이용하는 방법을 알아보고자 한다.
1. 참고
본 포스트에서는 Unity Editor 2020.3.32f1 버전을 사용했으며, C# Script 편집을 위해 Visual Studio 2022 버전을 사용했다. 필자와 다른 버전을 사용할 경우, 미세하게 다른 부분이 있을 수도 있으니 참고하자.
2. Scene과 버튼 구성
간단한 Scene
을 2개 만들어 두었다. File
→ New Scene
→ Save As...
를 통해 Scene
을 추가적으로 만들 수 있다.
2-1. acredev1 Scene 구성
acredev1
이름의 Scene
을 열고, Hierachy
→ +
→ UI
→ Button
을 클릭해 Button
을 하나 추가한다.
부모 객체 Canvas
의 자식 객체 Button
으로 자동 생성된 모습이 확인된다. Scene
이 전환되는 모습을 직관적으로 확인할 수 있게 필자는 Button
과 Button Text
의 Inspector
속성값을 아래와 같이 부여했다. Scene
전환이 잘 되는지 직관적으로 확인해 보기 위함이므로, 본인의 상황에 맞게 조치하면 된다.
구분 | 속성값 | ||
Canvas → Button | Rect Transform | Pos X | 0 |
Pos Y | 0 | ||
Pos Z | 0 | ||
Image | Color | [HEX] #89FF00 | |
Canvas → Button → Text | Text | Font Size | 50 |
2-2. acredev2 Scene 구성
마찬가지로 동일하게, Hierachy
→ +
→ UI
→ Button
을 클릭하면 부모 객체 Canvas
의 자식 객체 Button
이 자동적으로 생성된다. acredev2.scene
의 Button
과 Button Text
의 Inspector
속성값은 아래와 같이 부여했다.
구분 | 속성값 | ||
Canvas → Button | Rect Transform | Pos X | 0 |
Pos Y | 0 | ||
Pos Z | 0 | ||
Image | Color | [HEX] #00D0FF | |
Canvas → Button → Text | Text | Font Size | 50 |
2-3. Scene 빌드 세팅 (Build Settings)
상단 메뉴의 File
→ Build Settings...
를 클릭한다. 또는, 단축키 Ctrl
+ Shift
+ B
를 이용해 Build Settings
화면에 접근한다.
Project
카테고리의 Scenes
폴더에 위치한, 작업했던 Scene
들을 Scenes In Build
항목에 드래그 & 드롭을 통해 추가하고 화면을 닫는다.
3. C# Script 작성
Project
의 Assets
폴더에 Scripts
폴더를 하나 만들고, 폴더 내부에 SceneChanger
이름의 C# Script 파일을 생성한다. C# Script 이름은 필자와 달라도 상관 없지만, C# Script 파일 이름과 코드의 class
이름이 동일해야 에러가 발생하지 않으니 유의하자.
※ C# Script 이름은 SceneManager.cs
가 되면 안 된다. 자세한 내용은 아래▼를 참고하자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; // SceneManager를 사용하기 위한 참조
UnityEngine.SceneManagement;
를 참조한다. Scene
전환을 위해서는 SceneManager
메서드를 사용해야 하는데, 해당 메서드를 사용하기 위해 필요한 참조문이다.
public class SceneChanger : MonoBehaviour
{
public void acredev1SceneChange()
// acredev1SceneChange 이름의 함수 선언
{
SceneManager.LoadScene("acredev1");
//SceneManager 메서드의 LoadScene 함수를 통해 acredev1.scene으로 씬 전환
}
public void acredev2SceneChange()
// acredev2SceneChanger
SceneManager.LoadScene("acredev2");
//SceneManager 메서드의 LoadScene 함수를 통해 acredev2.scene으로 씬 전환
}
}
SceneChanger
클래스 내부에 Scene
전환 기능을 수행할 public void
형식의 함수를 선언한다. 함수의 이름은 마음대로 지정해도 상관 없지만, 내가 알아볼 수 있도록 직관적이게 짓는 것이 좋다.
C# Script 작성이 완료되면 Ctrl
+ S
단축키를 통해 C# Script 파일을 저장하고, Unity 화면으로 다시 돌아온다.
SceneManager 메서드?
▣ SceneManager.LoadScene("Scene이름");
SceneManager
의LoadScene
에Scene
이름을 지정해서Scene
전환 기능을 수행한다.
▣ SceneManager.LoadScene("Scene번호");
SceneManager
의LoadScene
에Scene
번호를 지정해서Scene
전환 기능을 수행한다.Scene
번호는Build Settings
에 접근하면 확인할 수 있다.
▣ 전체 스크립트 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour
{
public void acredev1SceneChanger()
{
SceneManager.LoadScene("acredev1");
}
public void acredev2SceneChanger()
{
SceneManager.LoadScene("acredev2");
}
}
4. Button에 C# Scripts 속성 부여 / OnClick 속성 부여
acredev1.scene
으로 진입해, 작성한 SceneChanger
C# Script를 Button
에 드래그 & 드롭해 Object
에서 C# Script를 사용하기 위한 속성을 부여한다.
Button
의 Inspector
탭에서, 스크롤을 내려 OnClick ()
항목으로 진입한다. OnClick()
메서드의 속성값은 아래와 같이 부여한다.
※ acredev1.scene
의 Button
은 acredev2.scene
으로 전환되는 버튼이다.
OnClick() 속성 | 값 |
Runtime | Editor And Runtime |
Function | SceneChanger → SceneChanger.acredev2SceneChanger() |
Object | Button |
OnClick() 속성값의 역할은?
▣ Runtime 선택
Runtime 속성 종류 값 설명 Off 작동하지 않는다. Editor And Runtime Unity 에디터 화면과, 프로젝트 빌드 파일에서도 작동한다. Runtime (기본 선택값) 프로젝트 빌드 파일에서만 작동한다.
▣ Function
Unity에서 기본으로 제공되는 Function
들도 있지만, 최하단으로 내려보면 우리가 추가한 C# Script 파일명과 함수명을 선택할 수 있다. 버튼을 눌렀을 때 동작할 기능을 선택하는 부분이다.
▣ Object
해당 이벤트가 발생할GameObject
를 선택한다. 우리는Button
을 클릭 시 (OnClick
) 발생할 이벤트를 구현하는 중이므로,Button
으로 지정해 주면 된다.
acredev2.scene
에도 동일하게 속성을 부여한다. 대신, acredev2.scene
의 버튼은 acredev1.scene
으로 전환하기 위한 버튼이므로 OnClick()
의 Function
은 SceneChanger.acredev2SceneChange()
함수로 부여해야 한다는 사실은 이해했으리라 생각한다.
5. 프로젝트 파일 다운로드
참고용으로 배포한다. 필자와 에디터 버전이 다를 경우, 에러가 나거나 정상적인 기능 실행이 되지 않을 수도 있으니 다른 에디터 버전을 이용하는 사람은 참고하자.
▣ 빌드된 파일
※ 파일 크기 떄문에 분할 압축해서 업로드 했으므로, 압축 해제시 모든 파일을 내려받은 후 압축 해제 해야함.
▣ 빌드되지 않은 프로젝트 원본 파일
※ 파일 크기 때문에 분할 압축해서 업로드 했으므로, 압축 해제시 모든 파일을 내려받은 후 압축 해제 해야함.
6. 실행 결과
정상적으로 Scene
이 전환되는 모습을 확인할 수 있다. Scene
전환 기능은 여러 상황에서 상당히 유용하게 사용할 일이 많으니, 잘 알아두면 좋을 것 같다.