【问题标题】:Unity - Whats the Opposite of instantiate - Transform not destroyingUnity - 实例化的对立面是什么 - 变换不破坏
【发布时间】:2017-05-29 01:07:55
【问题描述】:

我试图在更新中销毁下面的 prefab1(销毁它的游戏对象),但我的游戏中的 prefab 没有被删除。下面的 DESTROYING HOLE 1 GEMS 调试出现在控制台中,并且游戏对象被破坏,但即使 gemCount_Hole1 小于 1,宝石(预制精灵)也不会从我的游戏中删除。请帮忙

            if (gemCount_Hole1 < 1)
        {
            Debug.Log("DESTROYING HOLE 1 GEMS");
            if (prefab != null) Destroy(prefab.gameObject);
        }
        else
        {
            for (int i = 0; i < gemCount_Hole1; i++)
            {
                Instantiate(prefab, new Vector3((i + xPos_Hole1) * 2.0F, -14, 0), Quaternion.identity);
            }
        }

我创建了一个列表,但不知道如何编写销毁。这是我将其编码为列表的方式

 private System.Collections.Generic.List<GameObject> list ; 
 void Start()
 {
  list  = new System.Collections.Generic.List<GameObject>();
 } 
 void Update()
 {
  for (int i = 0; i < gemCount_Hole1; i++)
  {
   list .Add( Instantiate(prefab, new Vector3((i + xPos_Hole1) * 2.0F, -14, 0), Quaternion.identity)) ;
  }
 }

【问题讨论】:

  • 你可能只是在寻找Destroy ....docs.unity3d.com/ScriptReference/Object.Destroy.html
  • 您不能将该列表称为“列表” :) 您必须将其称为“宝石”或“孔”——无论是什么相关的。
  • 您绝对不能在“更新”中进行此操作。你在想“开始”
  • 你是说我不应该在更新中实例化预制件吗?这是有道理的,但我需要检查用户点击并销毁 gem。
  • 我必须在游戏启动时默认为每个存储桶加载 4 个宝石 - 我也使用 update () 来执行此操作。然后,例如,当用户单击存储桶 2 时,我需要将其计数设为 0(从中删除所有宝石)并使用 0 个宝石更新该存储桶并将宝石添加到其他一些存储桶。我可以正确地删除宝石并添加逻辑等,但无法弄清楚如何使用 update() 更新我的游戏屏幕。每次用户点击一个存储桶时,这个逻辑都会继续 - 它的所有宝石都被删除。我只想在用户单击存储桶时执行此操作。现在我的实例化发生在 update() 每一帧...

标签: c# unity3d unity5


【解决方案1】:

您不能直接销毁预制件。
当您将预制件实例化为 GameObjects 时,您必须将它们存储到 Array GameObject[] 或 List 中,然后在销毁它时,在列表中找到它并从那里销毁它。

【讨论】:

  • 我这样做了 - 请参阅更新后的问题。但我收到错误,因为我可能不知道如何销毁转换预制件。请查看我上面的列表代码,并建议我如何销毁预制转换的所有实例
  • @StarAzure 你不知道。它不存在于场景中,无法移除。您必须保存对实例化克隆的引用并销毁
  • 我能够将它存储到一个列表中并使用循环销毁列表中的所有内容。工作得很好。谢谢
  • “工作正常。谢谢”如果问题解决,请接受答案。
猜你喜欢
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 2011-09-10
  • 2023-03-24
  • 2011-04-06
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多