Unity

[Unity] 유니티 씬(scene)전환 간 로딩페이지(Loading page)및 프로그레스바(progressbar) 구현 하기, 로딩이 완료되었음에도 몇 초간 페이지 유지하기, allowSceneActivation, Application.LoadLevelAsync(), 유니티예제

정보처리마법사 2016. 11. 23. 16:04
반응형

 

 

[Unity] 유니티 씬(scene)전환 간 로딩페이지(Loading page)및 프로그레스바(progressbar) 구현 하기, 로딩이 완료되었음에도 몇 초간 페이지 유지하기,  allowSceneActivation, Application.LoadLevelAsync(), 유니티예제

 

 

유니티 Application.LoadAsync(), allowSceneActivation.

 

안녕하세요 정보처리마법사 입니다.

 

이번 포스팅의 주제는 Application.LoadAsync() 등 에 관한 내용입니다.

일단 이번에 구현하려는 것 은 씬과 씬 사이에 로딩겸, 튜토리얼 역할을 하는 로딩페이지 입니다.

예를들어 씬1이 있고 씬2가 있는데 씬2가 리소스를 많이 먹어서 로딩부하가 클 때 지금 만들려는

로딩씬을 씬1과 씬2 사이에 집어 넣으면 되겠습니다.

 

일단 예제를 시작하기 위해 유니티를 실행합니다. 제 유니티 버전은 5.3.6 입니다.

 

 

 

 

 

 

 

 

 

새 프로젝트를 만듭니다.

 

 

 

 

 

 

 

 

 

 

 

 

아무것도 없는 상태에서 현재 씬을 저장합니다.

 

 

 

 

 

 

 

 

 

 

이름은 편하신대로 합니다. 전 scene1 로 하였습니다.

 

 

 

 

 

 

 

 

 

 

 

 

Project 탭에서 scene1을 선택한 체 ctrl + D 를 누르면 복제가 됩니다. 컨트럴디를 두번 눌러서 두개를 복사합니다.

자 이제 씬이 세개가 되겠지요.

 

 

 

 

 

 

 

 

 

 

 

 

 

하이어라키(Hierarchy) 탭에서 우클릭 > 3D Object > 3D Text 를 하나 생성해줍니다. UI Text로 하든 편하신 대로 하시면 됩니다.

그냥 현재 씬 확인용 입니다.

 

 

 

 

 

 

 

 

 

 

 

 

Text를 Hello World 에서 끝에 1을 더 붙여줍니다 Scene1 이란 표시입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

씬3도 마찬가지로 변경해줍니다. 씬을 저장하지 않고 그냥 씬 3으로 가려니 팝업창이 뜨는군요

Save를 눌러 저장하고 씬3으로 갑시다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hello World3으로 변경했습니다.

 

 

 

 

 

 

씬을 저장해줍니다.

 

 

 

 

 

 

 

 

자 이제 본격적으로 만들어 봅시다. Scene2로 가서 하이어라키 탭에서 우클릭 > UI > Slider를 하나 생성해줍니다.

프로그레스바 같은 놈입니다.

 

 

 

 

 

 

 

생성된 Slider를 더블클릭하면 Scene 화면에 오브젝트가 있는곳을 표시해줍니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3D로 보니까 좀 이상하군요 왼쪽위 2D를 한번 클릭해줍니다.

 

 

 

 

 

 

 

 

 

 

 

이제 보기 편해졌군요 이제 C# 스크립트 를 하나 생성합니다.

 

 

 

 

 

 

 

 

 

프로젝트 탭에서 우클릭 Create > C# Script

파일명은 loading_between_scenes 로 하였습니다.

클래스 이름이 첫글자도 소문자고 좀 그렇네요. 양해 바랍니다.

 

 

 

 

 

 

 

 

스크립트가 생성되었군요.

 

 

 

 

 

 

 

 

 

 

더블클릭해서 스크립트 에디터로 갑니다.(비주얼스튜디오 또는 모노디벨롭 등등)

 

 

 

 

 

소스코드는 대충 이렇습니다.  이렇게 소스코드를 짠 후 몇 가지 할 일이 더 남았으므로 

다시 유니티로 돌아갑니다.

 

 

 

Ctrl + C , Ctrl + V

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class loading_between_scenes : MonoBehaviour
{
    public Slider slider;
    bool IsDone = false;
    float fTime = 0f;
    AsyncOperation async_operation;
 
    void Start()
    {
        StartCoroutine(StartLoad("Scene3"));
    }
 
    void Update()
    {
        fTime += Time.deltaTime;
        slider.value = fTime;
 
        if (fTime >= 5)
        {
            async_operation.allowSceneActivation = true;
        }
    }
 
    public IEnumerator StartLoad(string strSceneName)
    {
        async_operation = Application.LoadLevelAsync(strSceneName);
        async_operation.allowSceneActivation = false;
 
        if (IsDone == false)
        {
            IsDone = true;
 
            while (async_operation.progress < 0.9f)
            {
                slider.value = async_operation.progress;
 
                yield return true;
            }
        }
    }
}
 
cs

 

 

 

 

 

 

 

 

 Application.LoadLevelAsync가 obsolete 라고 하네요.

이제 앞으로 쓰지 않을거라고 대신 SceneManager.LoadSceneAsync 를 추천 하는군요.

 

 

 

 

 

 

 

 

 

아래 스샷과 같이 수정을 해줍니다. 동작은 같습니다.

 

 

 

 

 

 

 

하이어라키 탭에서 빈 오브젝트를 하나 생성해줍니다.

그리고 나서 이름을 Script로 변경해줍니다. 이름은 아무렇게나 편하신 대로 하면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

방금 생성한 Script 오브젝트에 아까 생성한 C# 스크립트를 드래그 해서 컴포넌트 추가를 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

그러면 오른쪽과 같이 인스펙터 탭에 추가가 된 것을 보실 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

그리고 하이어라키의 슬라이더를 위와 같이 드래그 해줍니다. 아까 작성한 소스코드 변수

Public Slider slider 에 연결을 시켜주는 것입니다.

 

이제 실행을 해보겠습니다. 한가지 방금 생각난 건데 원래 실제 동작방식은 씬1에서 씬3으로 바로 넘어간다고 

가정했을 때 씬3이 로딩부하가 커서 로딩 페이지를 구현하기 위해서 씬1 -> 씬2 -> 씬3 이런식으로 화면 전환이 됩니다.

씬2가 로딩페이지 이죠. 하지만 지금 예제에서 그렇게 하려면 씬1에 버튼등을 만들어서 씬2로 전환을 해야하는데 포스팅ㅇ

너무 길어질 것 같아서 그냥 씬2에서 씬3으로 바로 가는 것만 실행해 보겠습니다. 따라서 씬1은 지금 예제에서 사용하지 않습니다. ^^;

일단 모두 저장을 하고 나서 씬2로 넘어가서 실행을 하겠습니다. Ctrl + P 를 눌러도 되고 위 플레이 버튼을 눌러도 됩니다.

 

 

 

 

 

 

 

실행을 하니 씬을 로드할수 없다고 에러가 뜹니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

File > Build Settings... 로 가서

 

 

 

 

 

 

 

 

 

 

씬2, 3 을 드래그 해서 추가해줍니다. 그리고 아무것도 하지 않고 창을 닫습니다.

다시 실행을 해 보겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

로딩이 당연히 금방되니 슬라이더가 금방 만땅이 됩니다.

하지만 빨리 로딩이 되더라도 5초간 유지가 되게 설정을 해놨기 때문에 5초간 가만 있다가,

 

 

 

 

 

 

 

 

 

 

 

 

 

이렇게 씬3으로 넘어갑니다. 잘 동작하는군요~

수고하셨습니다. 짝짝짝.

 

 

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

 

 

 

잘 못 된 정보가 있으면 말씀해주세요.

공감버튼 클릭은 작성자에게 큰 힘이 됩니다.  행복한 하루 되세요.

 

“파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"

반응형