Babylon.js和Cannon.js相机和墙壁碰撞的bug

时间:2017-08-08 20:00:26

标签: collision-detection game-physics babylonjs cannon.js

我一直在完成一个基本的FPS式项目(使用我从潜伏在这里找到的很多建议)并且我遇到了一个问题。

以下是代码,首先是https://www.babylonjs-playground.com/#GYZQLK#3

使用箭头键向前移动相机,直至撞到墙壁,然后你就会看到我的问题。

我正在尝试

  1. 有一个自然的跳跃机制,
  2. 在相机,地面,墙壁等之间进行碰撞检测
  3. 起初我只是使用巴比伦的原生.checkCollisions做了这个,它非常适用于相机与物体和相机与墙壁碰撞。但是,我无法让它适合跳跃。即使按照其他的教程,(http://www.html5gamedevs.com/topic/12198-camera-jump/)我也没有得到我想要的结果;在我的电脑上,至少,所有这些游乐场的草图仍然“悬挂”在跳跃的顶部,直到按下其他箭头。

    所以,我换了齿轮并尝试使用(单独)Oimo和Cannon来获得更强大的物理效果。我仍然无法让Oimo工作,出于某种原因(“this.world.worldscale不是一个功能”为任何人敲响了铃声?我找不到任何东西)但是我已经用Cannon得到了不错的结果。

    总之,我有跳跃的工作,但现在碰撞与墙壁都是......时髦。

    我很困惑。我没有看到这种碰撞检测与地面和相机之间有什么不同,但有些东西显然不合适。我已经尝试过与其他水平物体(盒子,球体)相比,并且将相机的物理冒名顶替设置为一个盒子(这会让所有人感到紧张),效果最好。

    有任何建议或想法吗?谢谢大家!

1 个答案:

答案 0 :(得分:0)

我在http://www.html5gamedevs.com/topic/32220-collision-with-walls-using-cannon/得到了一些帮助,并认为我会在这里发布我的结果,以防其他人遇到同样的问题。

简短的回答是使用动画来控制跳跃,让Babylon物理引擎处理与相机的碰撞。让Cannon为其他物体做物理学。

为了防止相机悬挂在跳跃的顶部,有一个隐藏/未记录的属性(cameraname._needMoveForGravity),你可以设置= true(这听起来与你想要的相反,但无论如何)这有帮助。

以防万一其他人正在努力解决这个问题,这是一个草图(有一些额外的包袱,为了清晰起见,我修剪了大部分内容但不是一切)

按空格键跳转 http://www.babylonjs-playground.com/#NMPK63

基本上我从这里使用iiceman的例子 -

(主题)http://www.html5gamedevs.com/topic/12198-camera-jump/

(游乐场)http://www.babylonjs-playground.com/#XN87O

还有Wingnut关于改变camera._needMoveForGravity = true的建议,它成功地使相机不会在跳跃的顶部“悬挂”