2017-12-23 11 views
1

나는 don'tdestroyonload 스크립트를 사용하는 많은 오브젝트를 가진 2D RPG 게임을 만들려고합니다. 하지만 메인 메뉴로 돌아 가면 그걸 파기하고 싶습니다.로드시 파괴하지 마십시오

내가

SceneManager.activeSceneChanged += DestroyOnMenuScreen; 

void DestroyOnMenuScreen(Scene oldScene, Scene newScene) 
{ 
    if (newScene.buildIndex == menuScreenBuildIndex) 
    { 
     Destroy(gameObject); 
    } 
} 

는 그래서는로드 객체가 나는 메인 메뉴로 이동할 때 파괴됩니다에 파괴하지 않는 것을 의미 스크립트를 시도,하지만 난 다시, 그것은 것입니다 재생하고자 할 때 문제가

그것이 완전히 파괴되었다는 것을 의미하는 물체를 발견 할 수 없다는 것을 보여주십시오.

게임을 다시로드 할 때 이전과 같이 객체가 반환되는지 확인하는 방법이 있습니까? gameObject.setActive(false);을 사용해 보았습니다.하지만 게임을 다시로드하고로드 할 때 게임 오버 상태를 유지합니다.

답변

3

의 당신이 같은 장면이 있다고 가정 해 봅시다 :

  • 메뉴 =>는 메뉴 객체를 포함
  • 장면 l =>는 관리자 객체에게
  • Scene2
  • Scene3

당신은 DontDestroyOnLoad 원하는을 포함합니다 Scene1과 Scene2/3에서는 작동하지만 Menu에서는 제거됩니다. 탐색은 항상 메뉴에서 Scene1로 이동하는 것과 같습니다.

DontDestroyOnLoad 객체를 Scene1에 추가하십시오.

public class Menu:MonoBehaviour 
{ 
    void Start() 
    { 
     Destroy(FindObjectOfType<Manager>()); 
    } 
} 

public class Manager : MonoBehaviour 
{ 
     static Manager instance = null; 
     void Awake() 
     { 
      if(instance == null) 
      { 
       instance = this; 
       DontDestroyOnLoad(this.gameObject); 
       return; 
      } 
      if(instance == this){ return; } 
      Destroy(this.gameObject); 
     } 
} 

관리자가 싱글 스타일의 패턴을 필요 :

그런 다음 메뉴의 과정을 파괴합니다. Scene1로 돌아 가면 새 객체 인스턴스가 추가되고 원본은 유지되지만 새 객체는 제거해야합니다.

Main 클래스는 Manager를 찾을 수 있는지 확인합니다. 첫 번째 실행에서는 아무 일도 일어나지 않지만 재생 중에 메뉴로 돌아 가면 관리자가 발견되고 제거됩니다. 다음에 Scene1로 돌아 가면 장면의 일부이므로 새 Manager가 만들어집니다.

+0

도움 주셔서 감사합니다. 3 – HerryChoding

+0

늦게 읽음에 죄송합니다. 잠시 연락이 없으므로 – HerryChoding