씬 Scene

sejun-Lee·2025년 4월 22일

UnityEngine

목록 보기
8/12

씬 (Scene)

  • 유니티에서 게임 월드를 구성하는 단위
  • 프로젝트에 원하는 수만큼 씨능 포함할 수 있고 씬전환을 통해 다른 게임월드를 불러올 수 있음
  • 다중 씬을 이용하여 여러 씬을 동시에 열어 같은 게임월드에서 사용도 가능함

<빌드설정>

  • 유니티에서 여러 씬을 사용하기 위해선 빌드 설정에서 씬을 포함해야 함
  • 빌드 설정에서 포함한 씬을 게임 빌드 결과물에 포함함

< 씬 전환>

  • 프로젝트에 포함된 다른 씬을 로딩하고 기존의 씬의 내용을 삭제함.
  public class SceneChanger : MonoBehaviour
  {
    	private void Awake()
    	{
    	    Debug.Log("씬 체인저 생성!");
    	}

        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.Alpha0))
            {
                SceneManager.LoadScene("TitleScene");  //씬 순서 번호 or 씬 이름 으로 로드 가능
            }
            else if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                SceneManager.LoadScene("GameScene");
            }

        }
	
    /**********************************************************/


    // <씬 전환>
    // 프로젝트에 포함된 다른 씬을 로딩하고 기존의 씬의 내용을 삭제함
    public void ChageScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }


    // <씬 추가>
    // 프로젝트에 포함된 다른 씬을 로딩하고 기존의 씬의 내용을 유지함
    public void AddScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
    }


    // <비동기 씬 로드>
    // 씬 로딩을 백그라운드로 진행하여 게임 중 멈춤이 없도록하는 비동기 방법
    public void ChangeSceneASync()
    {
        AsyncOperation operation = SceneManager.LoadSceneAsync("StageScene2", LoadSceneMode.Additive);

        operation.allowSceneActivation = true;      // 씬 로딩 완료시 바로 씬 전환을 진행하는지 여부
        bool isLoaded = operation.isDone;           // 씬 로딩의 완료여부 확인
        float progress = operation.progress;        // 씬 로딩의 진행률 확인
        operation.completed += (oper) => { };       // 씬 로딩의 완료시 진행할 이벤트 추가
    }


    // <씬 언로드>
    // 로딩되어 있는 씬을 언로드 시키는 방법
    public void UnloadScene()
    {
        Scene scene = SceneManager.GetSceneByName("StageScene2");
        if (scene.isLoaded == true)
        {
            SceneManager.UnloadSceneAsync(scene);
        }
    }


    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag != "Player")
            return;

        SceneManager.LoadSceneAsync("StageScene2", LoadSceneMode.Additive);
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.gameObject.tag != "Player")
            return;

        SceneManager.UnloadSceneAsync("StageScene2");
    }
}
profile
초보 개발자

0개의 댓글