如何销毁我实例化的预制件? (统一)

时间:2021-07-09 13:40:41

标签: unity3d

我正在尝试为我的游戏制作一个关卡加载系统,而无需切换场景。我可以加载(幻想)一个关卡,但我不能卸载它(摧毁它)。这是代码

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;

如果你有时间,请帮助我。

2 个答案:

答案 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;
}