【问题标题】:all prefab is destroyed when the original prefab is deleted删除原始预制件时,所有预制件都将被销毁
【发布时间】:2016-10-13 18:55:14
【问题描述】:

例如,如果原始预制件被破坏,其他预制件也会被破坏。没有更多的克隆预制件...... 我必须破坏原来的预制件...因为它是敌人... 有没有办法让克隆的 prdfab 永久保存,即使原件被删除?

IEnumerator timedelay()
    {
        yield return new WaitForSeconds(3f);
        Debug.Log("sdfaDF");
        br = Instantiate(a ,new Vector3 (-4,-6,0), Quaternion.identity ) as          GameObject;
        br.tag = "a";
        makebox();
    }


void OnTriggerEnter2D(Collider2D other)
    {

        if (other.gameObject.tag == "a")
        {

            Destroy(other.gameObject);
            gm.mylife -= 1;

        }
    }

如果原始预制件遇到 OnTriggerEnter2D ,它会破坏......然后克隆预制件停止创建。即使原始预制件被破坏,我也需要使克隆的预制件不被破坏。

【问题讨论】:

  • 您的代码非常草率且不完整,但根据我所看到的,您想克隆 GO "a"。当它被破坏时,你当然不能再从它实例化......就像。从一张纸上复制文本,然后刻录“源表”,但仍想从中复制文本。你不能。它已经不存在了......
  • @Mark 感谢您的批评意见...我通过使用 resource.load 想通了。那么它工作得很好......

标签: c# unity3d


【解决方案1】:

使用您提供的代码进行调试非常困难,但我可以想到 1 个场景。确保您不在其中。

您可能已经破坏了原始预制件,而不是克隆,我指的是编辑器中的项目选项卡中的实际预制件。

[SerializeField] GameObject originalPrefab; // You dragged & dropped your prefab here
var clone1 = Instantiate(originalPrefab);
var clone2 = Instantiate(originalPrefab);
var clone3 = Instantiate(originalPrefab);
var clone4 = Instantiate(originalPrefab);
Destroy(originalPrefab); // If you do this you destroy everything.

试试这个:

[SerializeField] GameObject originalPrefab;
var baseClone = Instantiate(originalPrefab);
var clone1 = Instantiate(baseClone);
var clone2 = Instantiate(baseClone);
var clone3 = Instantiate(baseClone);
Destroy(baseClone); // Only destroy baseClone

如果你想销毁所有的克隆,你可以将它们保存在一个数组中,然后循环遍历每个调用 Destroy() 的数组。

【讨论】:

  • 感谢您的帮助。但我已经通过使用 resource.load 弄清楚了。现在效果很好。我也考虑你的意见。
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多