C# Can';t重新实例化/重生对象I';我在Unity3D中破坏了它

C# Can';t重新实例化/重生对象I';我在Unity3D中破坏了它,c#,unity3d,C#,Unity3d,我有两个脚本。一个制造对象,另一个销毁对象 我首先按下“保存”按钮,运行脚本1并创建我的对象。(不止一个,虽然这里的脚本中只显示了一个,我为了提问而缩短了) 然后我按下重置按钮,该按钮将销毁创建的对象/预制件。但当我再次按下Save上的时,它不会重新创建对象 这两个脚本连接到两个不同的游戏对象 以下是我所拥有的: 脚本#1: 我正在使用最新版本的Unity。我必须销毁这些对象并重新创建它们您需要一个预置来重新实例化该对象,但是销毁和重新实例化的操作非常繁重,因此通常您会使用类似于(免责声明:我是

我有两个脚本。一个制造对象,另一个销毁对象

我首先按下“保存”按钮,运行脚本1并创建我的对象。(不止一个,虽然这里的脚本中只显示了一个,我为了提问而缩短了)

然后我按下重置按钮,该按钮将销毁创建的对象/预制件。但当我再次按下Save上的
时,它不会重新创建对象

这两个脚本连接到两个不同的游戏对象

以下是我所拥有的:

脚本#1:


我正在使用最新版本的Unity。我必须销毁这些对象并重新创建它们

您需要一个预置来重新实例化该对象,但是销毁和重新实例化的操作非常繁重,因此通常您会使用类似于(免责声明:我是这篇文章的作者)或的池管理器


以下是关于池对象的官方统一消息:

您需要一个预置来重新实例化对象,但是销毁和重新实例化的操作非常繁重,所以通常您使用类似(免责声明:我是这一个的作者)或的池管理器


以下是关于池对象的官方统一指南:

您的
prefact
变量是什么类型的?它只是一个集合吗(如果是的话,“预置”是一个坏名字)。另外,你的“驼鹿”游戏对象是否有可能被重置后的“驼鹿”毁灭。是的,这就是我在想的,
prefable
变量是什么类型的?它只是一个集合吗(如果是的话,“预置”是一个坏名字)。另外,你的“驼鹿”游戏对象是否有可能被重置后的“驼鹿”毁灭。是的,这就是我所想的,这是一个格式错误的答案,但它是正确的,仍然得到正一,但在将来添加一些代码please@johnny5,谢谢你的+1。我曾考虑添加一个示例,但最终得到了一个复杂的代码示例,这可能会让不了解池和预置的用户感到困惑(这里似乎就是这种情况)。如果你觉得有帮助,我还是加上;)不,一旦你把事情弄清楚了就好了。当你提供的链接能够正常工作时,把整个教程放进去将是一个很大的工作fine@GiuseppeDeFrancesco但我做错了什么?如果我不想使用pooling怎么办?@2222好吧,要重新实例化对象,你所要做的就是使用分配给“go”的预置并重新实例化它,但这样做在Unity中是不好的做法(参见我指出的官方教程)。如果你有2个uGUI按钮指向这些方法,它肯定会在第一次工作,但你会在OnReset中销毁场景中的所有游戏对象,因此OnSave将不再存在,无法实例化新对象。这是一个格式错误的答案,但它是正确的,仍然获得加号,但将来添加一些代码please@johnny5,谢谢你的+1。我曾考虑添加一个示例,但最终得到了一个复杂的代码示例,这可能会让不了解池和预置的用户感到困惑(这里似乎就是这种情况)。如果你觉得有帮助,我还是加上;)不,一旦你把事情弄清楚了就好了。当你提供的链接能够正常工作时,把整个教程放进去将是一个很大的工作fine@GiuseppeDeFrancesco但我做错了什么?如果我不想使用pooling怎么办?@2222好吧,要重新实例化对象,你所要做的就是使用分配给“go”的预置并重新实例化它,但这样做在Unity中是不好的做法(参见我指出的官方教程)。如果你有2个uGUI按钮指向这些方法,它肯定会在第一次工作,但你在OnReset中销毁了场景中的所有游戏对象,因此OnSave将不再存在,从而无法实例化新对象。
public GameObject go;
public static volatile List<GameObject> prefab = new List<GameObject>();


public class OnSave : MonoBehaviour
{
public void Start2()
{
                var newObj = Instantiate(go);
                newObj.transform.parent = GameObject.Find("MOOSE").transform;
                newObj.GetComponent<Renderer>().material.color = Color.green;
                newObj.transform.localPosition = new Vector3(1.0,1.0,1.0)
                prefab.Add(newObj);


}
}
public class OnReset: MonoBehaviour
{
foreach (GameObject obj in prefab)
{
Destroy(obj);
}
}