【问题标题】:Unity3D: delete spawn objectsUnity3D:删除生成对象
【发布时间】:2016-03-26 17:44:54
【问题描述】:

我有一个 2d 游戏,其中有一个原始敌人忍者。
我创建了生成脚本来克隆我原来的忍者。然后我把它放在我的主摄像头上,让我的忍者克隆在主摄像头视图中生成。我原来的忍者也有一个脚本,它会在几秒钟后删除。
我意识到删除我原来的忍者会导致我的克隆忍者不会出现,但我想删除所有克隆的对象,这样我就不会过度运行我的项目。
有没有办法可以删除生成克隆忍者不接触原始忍者。或者将我的原始忍者隐藏在检查器中而不隐藏生成克隆。
这是我的销毁忍者代码:

private IEnumerator Killninja() {

   yield return new WaitForSeconds (4f);
     Destroy (gameObject);
}

    void Update () {
       StartCoroutine (Killninja ());
    }

【问题讨论】:

  • 主要忍者是否必须在游戏中,或者他只是一个预制件?否则你可以例如在脚本中包含一个公共布尔值,如 public bool isClone = true;,在检查器中将其设置为 false 以获取原始值并签入更新 if(isClone){ StartCoroutine... }
  • 您还应该在StartCoroutine 周围包含一个状态布尔值,以便它只启动一次。目前它开始每一帧。它仍然会被第一个破坏,但你只想要一个。

标签: unity3d destroy spawning


【解决方案1】:

如果您不希望您的原始忍者出现在场景中,请不要在场景中使用它。将其从场景中拖到 Project Explorer 中。这将创建一个忍者预制件。然后您可以从场景中删除忍者。

现在有一个 ObjectSpawner.cs 脚本,它的任务是生成一个 Prefab。忍者,喜欢:

public class ObjectSpawner : MonoBehaviour
{
    public GameObject prefab;

    void Start()
    {
        GameObject.Instantiate(prefab, transform.position, transform.rotation);
    }
}

将 ObjectSpawner 分配给场景中的一个空 GameObject,并将您之前创建的 Ninja Prefab 分配给它的 prefab 字段。这将在游戏开始后在 NinjaSpawner 对象的位置生成一个忍者。

您的 Ninja.cs 脚本将负责在时间到时销毁 Ninja:

public class Ninja : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(DestroyDelayed());
    }

    IEnumerator DestroyDelayed()
    {
        yield return new WaitForSeconds(4f);
        Destroy(gameObject);
    }
}

确保将脚本分配给您的 Ninja 对象。

【讨论】:

  • 谢谢你,它成功了,但我想每 100 秒产生不止一次忍者,就像一个计时器,而不是让它直接在主摄像机的视野中产生,你知道谁来做吗?再次感谢它的帮助
  • 您需要的一切都已在我的示例中显示。只需将第二个脚本的一些代码与第一个脚本的代码混合,您就拥有了所需的内容。
  • 如果要生成大量不同的对象,是否仍建议使用此方法?手动维护检查器中的所有拖放引用是否会让人头疼?
  • 如果你想生成多个对象,不要有多个生成脚本,而是让一个脚本简单地生成多个对象。
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 2013-02-26
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2013-05-12
相关资源
最近更新 更多