为什么Unity对撞机高速通过彼此?

时间:2018-09-06 01:57:28

标签: c# unity3d c#-4.0 game-physics

我在我的团结游戏中有一个迷宫,该游戏中还有一个穿过迷宫的红球,它们都具有对撞机(球形对撞机和迷宫式边缘对撞机),它似乎可以正常工作,但是,当您将球拖到迷宫中,经过几秒钟,就可以通过对撞机并通过,如果速度足够快,您可以像没有任何东西一样通过所有迷宫!,我在脚本中设置了速度限制(10),但效果不佳。

2 个答案:

答案 0 :(得分:1)

Unity通过其Collision Detection Modes处理此问题。确保您的Rigidbody组件具有相应配置的collisionDetectionMode属性(默认为Discrete)。似乎您希望球使用ContinuousDynamic,迷宫为Continuous,但请注意,如链接中所述:

  

只有具有以下特征的刚体才支持连续碰撞检测   球形,胶囊或BoxColliders。

您可能需要更改迷宫对撞机。

答案 1 :(得分:1)

您的问题是FixedUpdate,并且正在使用CollisionDetectionMode.Discrete

称为每秒N个计数,其中N是固定值。物理是在FixedUpdate上计算的。现在想象一下情况:

  1. FixedUpdate每秒被调用60次。 FixedUpdate之间的时间 通话时间为1秒/ 60次= 17毫秒(大约)
  2. 对撞机A尺寸为 1x1x1,对撞机B的大小为1x1x1
  3. 对撞机A附着在静止物体上,对撞机B附着在物体上以每秒90个单位的速度向对撞机B移动。
  4. 物理引擎正在比较A和 B在FixedUpdate上的位置它认为对撞机B只是 通过对撞机A传送,因为它是每人的速度 FixedUpdate刻度较大,然后是对撞机的大小。

enter image description here

如果要使用非常高的速度,则有以下三种选择:

  1. 尝试遵循 Foggzie 的建议
  2. 每秒增加 FixedUpdates 的计数,并避免脚本超载。
  3. 为高速物体实现自己的物理学