我正在尝试制作一个粘性手榴弹,在碰撞时禁用它的刚体,使用OnCollisionEnter()
。但是,当明显没有发生冲突时,OnCollisionEnter()
就会触发,正如您在下图中所看到的:https://imgur.com/w9KMEff。这会导致我的手榴弹卡在空中。我怀疑这是因为物理循环和渲染循环之间缺乏同步。此外,我的标准“非粘性”手榴弹使用相同的模型&工作得很好。
我已经尝试了以下几种方法:
OnTriggerEnter()
代替。结果好一点,但问题是它发射得太晚了,只有在手榴弹在障碍物内或敌人的时候。从0.01到0.001,所建议的那样。
所有这些都不起作用,所以我感到有点绝望。提前感谢您的帮助!
我用来在碰撞时粘住手榴弹的代码:
void OnCollisionEnter(Collision c) {
rigidbody.isKinematic = true;
transform.parent = c.transform;
}
发布于 2019-05-29 02:33:03
对于您的对象比例,PhysicsManager.DefaultContactOffset
可能设置得太高
根据这个Unity forum post,如果你的对象的比例太小,你的物理余量可能太高。OnCollisionEnter
将在一个物理滴答期间发射,并可能比你预期的更早更新手榴弹的位置。这就解释了为什么它会停留在接触点之外,而OnTriggerEnter
会在1帧之后处理。
文本形式的Unity帖子
Max_van_Hell,2017年6月1日
天啊,宝贝,我终于找到问题所在了!
显然,PhysicsManager.DefaultContactOffset对于我的规模来说太高了。默认接触偏移量约为0.02,对于约10 it的虚拟对象,它显然会产生巨大的误差。
这对我来说从来都不是问题,因为在大多数图形或游戏项目中,对象的规模实际上要大得多,所以这样的接触偏移不会有太大的影响。
然而,由于这是一个HoloLens项目,并且我正在使用10厘米-100厘米左右的虚拟对象,接触偏移量更合理。
无论如何,非常感谢你的帮助!
干杯,
https://stackoverflow.com/questions/56348007
复制相似问题