【问题标题】:Unity - GameObject won't destroyed when hit a prefabUnity - 击中预制件时不会破坏游戏对象
【发布时间】:2018-04-02 18:56:30
【问题描述】:

在游戏中,您控制一个球(Sphere)和两种掉落的盒子:deathCube 和 goldCube。当球体击中死亡立方体时,球体被破坏,但它没有被破坏,我不知道为什么。立方体是预制件,它们有一个标签(DeathCube、GoldCube)。

    void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "DeathCube") 
    {
        Destroy (gameObject);
    }
}   

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "GoldCube") 
    {
        gold++;
    }
}   

如果球体击中 goldCube 你会得到分数,但这也不起作用。

【问题讨论】:

  • 您的代码是否到达Destroy(gameObject) 行?你有放断点/日志吗?
  • 是的,在Inspector public GameObject sphere中也添加了;
  • 你的球体对撞机是否标记为IsTrigger

标签: c# unity3d destroy gameobject


【解决方案1】:

尝试将两个 OnTriggerEnter 合并为一个。

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "DeathCube") 
    {
        Destroy (gameObject);
    }

    if (other.gameObject.tag == "GoldCube") 
    {
        gold++;
    }
}  

我相信第二个会覆盖第一个,永远不允许调用 Destroy()。我会假设编译器会抛出一个错误,但你似乎没有表明这一点。

【讨论】:

  • 很高兴我能帮上忙!在我编程时,最让我全神贯注的往往是愚蠢的错误,因此在其他人的代码中更容易发现它。
【解决方案2】:

如果您没有将刚体连接到碰撞中的至少一个对象(球或立方体),则不会启动触发事件。

来自文档:

注意:仅当其中一个碰撞器还附加了刚体时才会发送触发事件

来源:https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerEnter.html

【讨论】:

  • 这就是问题所在,在我触发了它工作的对象之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多