2017-05-30 289 views
0

我正在构建一个基本的太空射击游戏,但在触发对撞机时遇到了问题。在Unity中快速移动游戏对象的碰撞检测

在游戏中,我有一个Bullet预制有一个Capsule Trigger Collider附加在它上面,敌人现在是一个带有箱子对撞机的基本立方体。

当我运行游戏时,我开始拍摄子弹和敌人的立方体不会消失,直到几枪后。

这里是我的子弹预制代码:

void OnTriggerEnter(Collider col) { 
     if (col.tag == "Enemy") { 
      Destroy (col.gameObject); 
     } 
    } 

而且我的每个游戏对象的属性截图:

子弹预制:

Bullet Prefab

这里是敌方魔方:

enter image description here

这里所发生的事情的一个视频的链接...

https://youtu.be/NjHK6oVP0OQ

+1

[如何防止碰撞体相互传递?](https://stackoverflow.com/questions/9688237/how-to-prevent-colliders-from-passing-through-each-other) – Serlite

回答

1

据我所知,这个问题可能是一个类似于在评论中发表,但是我没有找到另一种解决方案,对于有这个确切问题的人来说可能有些用处。

发生错误是因为我的“Bullet”预制件移动得太快以至于无法检测到碰撞。

修复:我改变了子弹预制件的碰撞检测属性刚体为连续动态的,因为它是移动速度快。完整参考刚体碰撞检测模式链接如下。

enter image description here

https://docs.unity3d.com/ScriptReference/Rigidbody-collisionDetectionMode.html

这和“相似”的问题的答案张贴在注释之间的区别是,答案有很多事情要做的光线投射与非常简单的对撞机(这是更多的是我正在寻找)。

+0

绝对是一种有效的引擎内解决方法 - 但值得注意的是,在某些情况下,即使此模式可能会错过高速小物体的碰撞。如果它适合你虽然,太棒了!当然是一个比需要手动检测即将发生的碰撞更简单的解决方案。 – Serlite