Scene 'Scene_Play' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.

To add a scene to the build settings use the menu File->Build Settings...

UnityEngine.SceneManagement.SceneManager:LoadScene(String)

Source_Title:Press_Play() (at Assets/Scripts/Source_Title.cs:21)

UnityEngine.EventSystems.EventSystem:Update()


이렇게 나올 때가 있다.


검색을 해보니 다음과 같이 해결하면 된다.


해결 방법


씬을 따로 생성할 경우 본인은 새롭게 만들었지만,  유니에서는 아직 Scene에 대한 정보를 갖고 있지 않기 때문이다.


따라서 유니티에 명시해주어야 한다.


위 에러에서도 친절히 설명하고 있다.


File - Build Settings에 가서 씬을 추가하라고...


하는 방법은 위 사이트에 들어가서 해결하자.



Posted by sungho88
,

유니티에서 현재 활성화(Active) 된 씬 정보를 불러오는 것은


SceneManager.GetActiveScene()


이다. 그리고 그 씬의 이름을 알고 싶다면


SceneManager.GetActiveScene().name


으로 하면 된다.



Posted by sungho88
,

일단, 가장 단순하게 버튼 하나를 생성하고 그 버튼을 눌렀을 때 다른 씬으로 넘어가도록 하려고 한다.

한 가지 기능씩 구현해나가며 익숙해지려고 한다.


1. 버튼을 만들어야 한다.


GameObject - UI - Button으로 생성한다.

이상한 위치에 가있으므로 버튼의 위치를 0 0 0 으로 초기화(Reset)시킨다.


2. 다음으로 C# 스크립트를 하나 생성한다.


프로젝트 뷰 - Create - C# Script를 클릭하여 파일을 생성한 후 이름을 원하는 이름으로 변경해준다.


※내가 겪은 주의 할 점 두 가지


1) 생성 직후 이름을 변경하는 것은 문제가 없으나, 추후에 변경할 경우 스크립트에 있는 클래스명은 변하지 않으므로 스크립트를 열어 클래스명도 동시에 수정해줘야한다.


2) 씬을 변환해주는 이미 내장된 클래스명이 SceneManager이므로 이 클래스명은 사용하지 말아야한다. SceneManager가 명확한 파일명이 될 수 있지만, 이렇게 이름을 지을 경우 SceneManager의 본래의 내장된 기능을 사용할 수 없게된다.


어쨋든, 스크립트를 생성하면 열은 뒤, 씬을 변경하는데는 Start()함수와 Update()함수는 필요하지 않다.

씬을 변경하는 작업만 할 것이므로 삭제한다.

그 다음에 임의로 메소드 하나를 생성한다. 나는 ButtonClick이라는 이름으로 만들었다.


그 메소드에는 SceneManager.LoadScene("Play");만 써주면 된다.

아 그 전에 SceneManager를 사용하기 위해서는  맨 위에


using UnityEngine.SceneManagement;


을 한줄 추가해주어야 한다. SceneManagement를 사용하겠다는 정의이다.

LoadScene()함수는 이름에서도 알 수 있듯이 씬을 로드해오는 기능을 갖은 함수이다.

매개변수로 string으로 불러오고자 하는 씬명(Scene Name)을 작성해주면 끝~~


전체 코드는 다음과 같다.


using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;


public class SceneChanger : MonoBehaviour

{

    public void ButtonClick()

    {

        SceneManager.LoadScene("Play");

    }

}

 


예전 방식으로 씬을 불러오기 위해서는 

Application.LoadLevel("Play"); 를 사용했다.

더이상 사용하지 않도록 하자.  물론 지금 사용해도 에러.오류는 나지 않지만, 경고가 뜬다. 


application.loadlevel is obsolete. Use SceneManager.LoadScene.


그러므로, SceneManager.LoadScene("")을 사용하는 것을 권장한다.


Posted by sungho88
,