【问题标题】:Cube wont destroy on collision in unity?立方体不会在统一碰撞时破坏?
【发布时间】:2018-05-22 17:45:02
【问题描述】:

我正在制作一个游戏,其中玩家驾驶飞机(全刚体,碰撞器),我有一个附有以下脚本的立方体:

 using UnityEngine;
 using System.Collections;

 public class collision : MonoBehaviour
 {
     void OnCollisionEnter(Collision col)
     {
         if (col.gameObject.name == "breakableBox")
         {
             Destroy(col.gameObject);
         }
     }
 }

而我想要实现的是,一旦飞机坠入立方体,立方体就会消失。相反,飞机只是从立方体反弹,这真的很奇怪。基本上,立方体就像一个混凝土盒子,它不会移动或被破坏。我该如何解决?

【问题讨论】:

  • 在立方体的碰撞器组件上,也许检查isTrigger?
  • 确保对象的 namebreakableBox 而不是它的标签。尽管您应该为此使用标签而不是名称,但这样您就可以拥有多个标签。
  • 您应该将此脚本附加到飞机上,而不是盒子上。

标签: c# unity3d collision-detection


【解决方案1】:

如果此脚本附加到多维数据集,它将不起作用。

void OnCollisionEnter(Collision col) 函数正在接收玩家的碰撞对象,因此它会检查玩家是否具有名称“breakableBox”并尝试销毁它。

我认为如果您将此脚本附加到播放器或将其更改为如下内容:

using UnityEngine;
using System.Collections;

public class collision : MonoBehaviour
{
    void OnCollisionEnter(Collision col)
    {
        if (col.gameObject.name == <player_Name>)
        {
            Destroy(this.gameObject);
        }
    }
}

你可以让它工作。

【讨论】:

  • Collider 参数重命名为other 也有助于了解发生了什么。
【解决方案2】:

尝试将盒子的对撞机设置为“触发器”并使用:

using UnityEngine;
using System.Collections;

 public class collision : MonoBehaviour
 {
     void OnTriggerEnter(Collider col)
     {
         if (col.gameObject.name == "breakableBox")
         {
             Destroy(col.gameObject);
         }
     }
 }

【讨论】:

    【解决方案3】:

    嗯,这有很多因素。尝试其中一些选项:

    1. 首先检查碰撞的对象。它必须具有“breakableBox”名称。
    2. OnCollisionEnter(Collision col) 如果触发器未选中并且 如果触发器被选中,OnTriggerEnter(Collider col) 会起作用。
    3. 确保您移动对象时不是使用变换,而是使用刚体.速度。
    4. 尝试在 if 函数之外进行 Debug.Log。如果显示日志,则 验证错误。

    只有这些来自我的脑海。希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多