不要在负载上摧毁

时间:2017-12-23 09:27:08

标签: c# android unity3d

我正在尝试制作一个2D RPG游戏,它有很多我使用过的对象并没有tdestroyonload脚本。但是当我回到主菜单时,我想破坏它。

我试过这个剧本

SceneManager.activeSceneChanged += DestroyOnMenuScreen;

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

这意味着当我移动到主菜单时,不会破坏装载对象,但问题是当我想再玩时,它会告诉我它无法找到对象意味着它已被彻底摧毁。

当我再次加载游戏时,有没有办法确保对象像以前一样返回?我尝试使用gameObject.setActive(false);但是当我死了并再次加载游戏时,它仍处于游戏状态。

1 个答案:

答案 0 :(得分:3)

假设您有以下场景:

  • 菜单=>包含菜单对象
  • Scene1 =>包含Manager对象
  • 第二幕:
  • Scene3

您希望DontDestroyOnLoad在Scene1和Scene2 / 3上工作,但在菜单上删除。 导航是这样的,您总是从菜单移动到Scene1。

在Scene1中拥有DontDestroyOnLoad个对象。

然后在Menu有破坏过程:

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

public class Manager : MonoBehaviour
{
      private static Manager instance = null;

      private void Awake()
      {
          if (instance == null)
          { 
               instance = this;
               DontDestroyOnLoad(gameObject);
               return;
          }
          if (instance == this) return; 
          Destroy(gameObject);
      }
}

您的经理需要单身风格模式。当您返回到Scene1时,将添加该对象的新实例,您需要确保原始文件保留,但新文件将被删除。

Main类将检查是否可以找到Manager。在第一次运行时,没有任何反应,但在游戏过程中,如果您返回菜单,则会找到并删除管理器。下次返回Scene1时,会创建一个新的Manager,因为它是场景的一部分。