我正在尝试为我的游戏制作一个关卡加载系统,而无需切换场景。我可以加载(幻想)一个关卡,但我不能卸载它(摧毁它)。这是代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelLoadingSys : MonoBehaviour
{
public void loadLevelT()
{
GameObject LvlT = Instantiate(LevelTutorial);
load();
}
//unload levels
public void unloadLevelT()
{
Destroy(LvlT);
}
//levels
public GameObject LevelTutorial;
如果你有时间,请帮助我。
答案 0 :(得分:1)
在这一行:GameObject LvlT = Instantiate(LevelTutorial);
,您正在实例化的预制件存储在局部变量 (LvlT
) 中。
这个变量在其作用域的末尾被删除:方法 loadLevelT()
但实例化的游戏对象仍然存在于场景中。
该变量也不应在 unloadLevelT()
方法中可用。 您的编辑器和/或 Unity 是否显示错误?
如果您想让它起作用,您应该将 LvlT
声明为类字段或属性而不是局部变量,以便您的所有类方法都可以访问它。
这可能是您班级的工作版本:
public class LevelLoadingSys : MonoBehaviour
{
public void loadLevelT()
{
LvlT = Instantiate(LevelTutorial);
load();
}
//unload levels
public void unloadLevelT()
{
Destroy(LvlT);
}
//levels
public GameObject LevelTutorial;
private GameObject LvlT;
}
请注意,我可能遗漏了一些东西。下次尝试发布您的整个课程,以便我们了解完整的背景信息。
答案 1 :(得分:1)
工作代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelLoadingSys : MonoBehaviour
{
GameObject LvlT;
public void loadLevelT()
{
LvlT = Instantiate(LevelTutorial);
load();
}
public void unloadLevelT()
{
Destroy(LvlT);
}
//levels
public GameObject LevelTutorial;
}