美文网首页
Unity高速碰撞下位置偏移的处理

Unity高速碰撞下位置偏移的处理

作者: 巨芋 | 来源:发表于2017-01-13 17:13 被阅读188次

    发现问题

    在使用Unity的物理碰撞时,会用到该方法:

    void OnCollisionEnter2D(Collision2D coll){

    //代码

    }

    在该代码加入:

    Time.timeScale = 0.001f;

    会发现在高速碰撞的时候,虽然执行了方法,但是有可能碰撞的两个物理之间有一段距离,如果这个时候需要严格的位置数据,显然是不靠谱的。

    关于FixedUpdate

    为什么会有距离?两个球的画面是怎么出来的?

    查看OnCollisionEnter2D方法在生命周期中的情况。

    可以看到,OnCollisionEnter2D确实是由Unity的物理引擎计算出来的并且执行的。

    两个有距离的球怎么会有碰撞?难道是物理引擎的BUG?

    后来通过stackoverflow了解到,FixedUpdate的执行时间是可配置的,距离的产生主要是FixedUpdate的执行频率较小。

    通过Time.fixedDeltaTime可进行配置,默认是0.02,也就是说每秒50次物理运算。

    我将其调整到Time.fixedDeltaTime = 0.015f来保证每秒有60次物理运算,BUG随即消失。

    但是物理计算需要耗费CPU,注意别挑得太高。

    相关文章

      网友评论

          本文标题:Unity高速碰撞下位置偏移的处理

          本文链接:https://www.haomeiwen.com/subject/rhysbttx.html