我正在尝试制作一个2D RPG游戏,其中包含很多我不使用的脚本notdestroyonload脚本。但是当我返回主菜单时,我想销毁它。
我已经尝试过此脚本
SceneManager.activeSceneChanged += DestroyOnMenuScreen;
private void DestroyOnMenuScreen(Scene oldScene, Scene newScene)
{
if (newScene.buildIndex == menuScreenBuildIndex)
{
Destroy(gameObject);
}
}
因此,这意味着当我移至主菜单时“不要破坏”对象将被破坏,但问题是当我想再次播放时,它将向我显示它找不到找到已被破坏的对象完全。
当我再次加载游戏时,是否有办法确保对象像以前一样返回?我尝试使用
gameObject.setActive(false);
,但是当我死亡并再次加载游戏时,它仍处于游戏结束状态。 最佳答案
假设您的场景如下:
Menu =>包含Menu对象
Scene1 =>包含Manager对象
场景2
场景3
您希望DontDestroyOnLoad
在Scene1和Scene2 / 3上工作,但在菜单上删除。
导航使您始终从菜单移至Scene1。
将您的DontDestroyOnLoad
对象放在Scene1中。
然后在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,因为它是场景的一部分。