【问题标题】:Unity Destroy GameObject instantiated cloneUnity Destroy GameObject 实例化克隆
【发布时间】:2014-05-31 15:52:57
【问题描述】:

我想要实现的目标是销毁实例化对象(即粒子系统)。经过一番研究,我发现实例化和销毁实例化对象的方法是这样的:

public class CoinCollider : MonoBehaviour
{   
    public Transform coinEffect;

    void OnTriggerEnter(Collider info)
    {
        if (info.name == "Ball")
        {
            GameObject effect = GameObject.Instantiate(coinEffect, transform.position, transform.rotation) as GameObject;

            Destroy(effect);
            Destroy(gameObject);
        }
    }
}

但似乎没有删除它,这个对象被继承到一个正在被销毁的对象。但是在使这个破坏之后。它似乎创建了另一个名为“粒子系统(克隆)”的游戏对象,没有父对象。怎么删除?

【问题讨论】:

  • “这个对象被继承给一个正在被销毁的对象”是什么意思。
  • @FunctionR 我的意思是它有一个父对象
  • 应该没问题的。在下面检查我的答案。

标签: c# unity3d


【解决方案1】:

问题

我发现了您的问题,您是 Unity 过度保护的受害者。您正试图破坏克隆的转换组件,但不允许这样做,因此 Unity 会忽略您。

解决方案

void OnTriggerEnter(Collider info)
{
   if(info.name == "Ball")
      Destroy(Instantiate(coinEffect.gameObject, transform.position, transform.rotation), 5f);
}

所以你只需要这一行。您实例化效果的transformgameObject 组件。然后Destroy它使用​​定时器,我给它5f,否则效果会瞬间被破坏。

【讨论】:

  • 你的代码是解决方案,谢谢你......你怎么知道统一做这种事情?
  • 我使用 Unity 已经有一段时间了。
  • 您的解决方案有效。我最近遇到了这个陷阱,终于找到了这个。我认为这很令人困惑。如果 Unity 不希望我们立即销毁它,它应该警告我们或直接抛出异常。我检查了我的代码,所以很可能多次发现没有其他问题,我只是不知道它不会像那样被破坏......
【解决方案2】:

这对我有用。

void DestroyProjectile() { 销毁(Instantiate(destroyEffect, transform.position, Quaternion.identity), 3f);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2022-01-16
    • 2020-10-14
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多