初学者请教如何让携带rigibody 和Collider的角色 撞墙时不会发生撞击而是止步

qq_35903191 2018-03-02 03:46:15
初学者请教如何让携带rigibody 和Collider的角色 撞墙时不会发生撞击而是止步,墙体也是携带rigibody 和Collider。
目前 角色持续撞墙会颤抖
...全文
587 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35903191 2018-03-06
  • 打赏
  • 举报
回复
非常感谢细心回答
引用 1 楼 huangfu6long 的回复:
之所以会发生颤抖现象,是因为刚体向前移动,刚体身上的碰撞器与其他碰撞起发生了交叉(也就是碰撞器进入另外一个碰撞器内部),然后中下一帧被物理引擎修正到未碰上(逐帧调试可发现这一点,默认是修正为两个碰撞器距离0.01,这个值在 Edit/Project Settings/Physics里面的Default Contact offset)。 修正后,你没判断是否可以继续向前移动,然后又导致两个碰撞器交叉。然后又中下一帧修正。再播放运行模式下看起来就是颤抖了。 知道了问题所在,要解决这个问题就简单了。只要判断出不能再次向前的了,那么不继续向着那个方向移动就行了。 至于方法的话就比较多种方式了,举个简单的例子:移动之前发射射线,判断是否可走。 不过射线的代价有点大,不建议同一帧发射太多射线。 相对来说我个人更热衷于用触发器替代射线,至于触发器的摆放位置、以及大小等,这个就只能根据你的项目需求自行调整了。
幽幽有悠悠呦 2018-03-03
  • 打赏
  • 举报
回复
当然。如果你仅仅是要装上墙壁后,停下来不动,那就更简单了。只要监听下进入碰撞器的事件消息响应回调函数,在里面暂时关闭掉向前移动的功能就行了
幽幽有悠悠呦 2018-03-03
  • 打赏
  • 举报
回复
之所以会发生颤抖现象,是因为刚体向前移动,刚体身上的碰撞器与其他碰撞起发生了交叉(也就是碰撞器进入另外一个碰撞器内部),然后中下一帧被物理引擎修正到未碰上(逐帧调试可发现这一点,默认是修正为两个碰撞器距离0.01,这个值在 Edit/Project Settings/Physics里面的Default Contact offset)。 修正后,你没判断是否可以继续向前移动,然后又导致两个碰撞器交叉。然后又中下一帧修正。再播放运行模式下看起来就是颤抖了。 知道了问题所在,要解决这个问题就简单了。只要判断出不能再次向前的了,那么不继续向着那个方向移动就行了。 至于方法的话就比较多种方式了,举个简单的例子:移动之前发射射线,判断是否可走。 不过射线的代价有点大,不建议同一帧发射太多射线。 相对来说我个人更热衷于用触发器替代射线,至于触发器的摆放位置、以及大小等,这个就只能根据你的项目需求自行调整了。

2,543

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧