避免与Bullet发生地面碰撞

use*_*088 7 c++ game-engine bulletphysics

我正在尝试使用Bullet物理引擎来创建一个3D世界.

我的角色身体上有一个胶囊形状,我的地面是由一些静态块组成的,这是一个用来说明我的话语的模式: 在此输入图像描述

当我的角色从一个区块跑到另一个区块时出现问题:子弹检测到碰撞,我的角色开始在y轴上跳跃一点.

我该如何避免这个问题?

Nic*_*tke 15

我为解决这个问题所做的工作如下:

我没有将胶囊滑到地面上,而是在弹簧顶部安装了一个动态的胶囊.我将弹簧实施为几个来自胶囊底部的射线模型.弹簧的长度大约是半米或更短,它将拉动并推动胶囊进出地面.抓握/拉动很重要,因此角色不会意外跳跃.弹簧刚度控制着你有多少晃动.

这具有以下效果

  • 由于胶囊漂浮,因此地板上的几何边缘不会发生不希望的碰撞
  • 隐含地走上楼梯和斜坡.弹簧只是"踏上"台阶的一步,将角色舱向上推.
  • 跳跃的实施只是释放弹簧在地面上的抓地力并给身体一个冲动的问题.
  • 跳跃或跌倒后的着陆角色会自动显示"膝盖弯曲",如您所料
  • 一般的垂直运动令人愉快的平滑.就像电梯平台等
  • 由于抓地力拉到地面,即使在下坡时,角色也不会像你在某些游戏中那样开始"飞行"(我觉得这很烦人).
  • 避震特性=减少弹簧和/或胶囊的长度.
  • 滑下坡?您可以通过检查弹簧撞击的射线投射的地板区域的角度来完全控制它.

由于弹簧的刚度,弹簧的长度,握把的长度等原因,我不得不玩很多东西.但最后我很高兴看到它有多么简单.

  • 嘿,我知道已经有一段时间了,但春天到底是什么?我的意思是,这是 Bullet 的课程还是物理概念?谷歌没有太大帮助 (2认同)