OnTriggerEnter开火太晚

时间:2019-05-28 18:19:54

标签: c# unity3d

我正在尝试使用OnCollisionEnter()通过在碰撞时禁用其刚体来制造手榴弹。但是,OnCollisionEnter()会在明显没有碰撞发生时触发,如您在此图像中看到的:https://imgur.com/w9KMEff。这导致我的手榴弹在空中停留。我怀疑这是由于物理循环与渲染循环之间缺乏同步。而且,我的标准“不粘手榴弹”使用相同的模型并且运行良好。

我已经尝试了以下方法:

  • 确认没有其他对撞机可能引起我的手榴弹 “坚持下去”

  • 改为使用OnTriggerEnter()。结果要好一些,但问题是,一旦手榴弹进入障碍物或敌人内部,它就会开火太晚。

  • 为所有对象添加刚体和连续碰撞检测

  • 将PhysicsManager.DefaultContactOffset从0.01调整为0.001,由Eliasar建议

  • 从“ PCM”切换到“传统联系人生成”

这些都不起作用,所以我感到有些绝望。预先感谢您的帮助!

我在碰撞时将手榴弹粘在上面的代码:

void OnCollisionEnter(Collision c) {
   rigidbody.isKinematic = true;
   transform.parent = c.transform;
}

1 个答案:

答案 0 :(得分:3)

PhysicsManager.DefaultContactOffset对于您的对象比例可能设置得太高

根据此Unity forum post,如果对象的比例太小,则物理裕度可能会太高。 OnCollisionEnter将在物理跳动时触发,并可能比您预期的更快地更新您手榴弹的位置。那可以解释为什么它会停留在接触点之外,而OnTriggerEnter会在以后处理1帧。