我正在尝试使用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;
}
答案 0 :(得分:3)
PhysicsManager.DefaultContactOffset
对于您的对象比例可能设置得太高根据此Unity forum post,如果对象的比例太小,则物理裕度可能会太高。 OnCollisionEnter
将在物理跳动时触发,并可能比您预期的更快地更新您手榴弹的位置。那可以解释为什么它会停留在接触点之外,而OnTriggerEnter
会在以后处理1帧。