我正在尝试制作一个2D RPG游戏,它有很多我使用过的对象并没有tdestroyonload脚本。但是当我回到主菜单时,我想破坏它。
我试过这个剧本
SceneManager.activeSceneChanged += DestroyOnMenuScreen;
private void DestroyOnMenuScreen(Scene oldScene, Scene newScene)
{
if (newScene.buildIndex == menuScreenBuildIndex)
{
Destroy(gameObject);
}
}
这意味着当我移动到主菜单时,不会破坏装载对象,但问题是当我想再玩时,它会告诉我它无法找到对象意味着它已被彻底摧毁。
当我再次加载游戏时,有没有办法确保对象像以前一样返回?我尝试使用gameObject.setActive(false);
但是当我死了并再次加载游戏时,它仍处于游戏状态。
答案 0 :(得分:3)
假设您有以下场景:
您希望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,因为它是场景的一部分。