7. Scene management

2013. 7. 9. 00:51게임 개발/Unity

 

1.     Scene 의 구성/ 생성 / 전환 ,스크립트를 이용한 GameObject 생성
Build Setting
메뉴 상에서 Scene in Build 에 추가를 해야 구현이 가능하다.

 

2.     Scene 전환시에도 GameObject 유지, Scene 전환후 처리

 

* Scene 전환시 Tip
새로운 레벨이 로드 될 때 이전 레벨의 오브젝트가 삭제되지 않기를 바라면, 희망하는 오브젝트에 DontDestroyOnLoad()함수를 사용하면 되고, 추후 다 사용한 뒤에 삭제는 꼭 별도로 해줘야 함.

 

 

 

public void ChangeScene(string sceneName)

{

           this.sceneName = sceneName;

           StartCoroutine(ChangeScene2());

}

private IEnumerator ChangeScene2()

{

           DontDestroyOnLoad(gameObject); //loading 시에 메모리에서 해제 되지 않음.

           if(this.fadeOut)

           {

                     LevelHandler2.Instance().screenFader.FadeSceen(true, 0, 1, false, 0, 0, false, 0, 0,  false, 0, 0,  this.fadeOutInterpolate, this.fadeOutTime);

                     yield return new WaitForSeconds(this.fadeOutTime);

           }

           this.check = true;

           if(sceneName == "")

                     Debug.LogError("No scene name is set in Scene Changer.");

           else

                     Application.LoadLevel(sceneName);

}

IEnumerator OnLevelWasLoaded(int level)

{

           if(this.check)

           {

                     //Debug.Log("OnLevelWasLoaded is called.");

                     if(level == 1)

                     {

                                GameObject go = GameObject.Find("BackgroundTitle");

                                if(go)

                                          go.active = false;

                                CreateEventSpawnPlayer();

                     }

                     yield return null;           

                     //fade-in the loaded scene.

                     if(this.fadeIn)

                     {

                                LevelHandler2.Instance().screenFader.FadeSceen(true, 1, 0, false, 0, 0, false, 0, 0,  false, 0, 0,  this.fadeInInterpolate, this.fadeInTime);

                     }

                     yield return null;           

                     GameObject.Destory(gameObject);

           }

}

 

활용 Tip

1.     Unity3D 에서는 다음의 API 들로 scene에서 다른 scene 을 로딩 할 수 있다.

2.     Application.LoadLevel
Application.LoadLevelAdditive
Application.LoadLevelAsync
Application.LoadLevelAddtiveAsync

3.     만약 iOS 에서 한번에 큰 scene을 읽어 들이는 경우에는 많은 로딩 시간이 소요될 수 있는데, 이런 경우에는 scene을 여러 개의 작은 scene 으로 분할 한 다음 , 첫번째 scene을 로딩한 다음 LoadLevelAdditive LoadLevelAdditiveAsync 를 사용하여 다음 Scene 을 현재 로딩한 scene 에 추가하는 방법으로 로딩 시간을 줄 일 수 있다. __Async 의 함수들은 비동기로 로딩을 하는 기능을 제공한다.

 

 

 

 

 

 

 

 

 

http://aydenunity.wordpress.com/2013/05/31/assetbundle-workflow-unity-asia-bootcamp/