项目前提
我的 THREE.js 游戏的想法是让玩家在迷宫般的物体中导航并到达出口。我不仅需要立方体和球体的碰撞检测,还需要从 Blender 导入的模型。我考虑过使用 RayCasting,但我决定使用 Physi.js。
问题
,这个想法是给相机一个“身体”,这样玩家就不能像他们只是一个相机对象时那样穿过墙壁或其他物体。然而,我的“玩家”对象似乎失去了它所有的 Physi.js 属性,只要我给它三个.PointerLockControls( player )。我正在做的是创建一个 Physijs.BoxMesh,播放器,并将相机添加到其中。之后,我将“播放器”对象传递给我的 setupControls() 函数。
var geometry = new THREE.BoxGeometry( 500, 500, 500 );
var material = new THREE.MeshPhongMaterial( {color: 0x0000FF} );
player = new Physijs.BoxMesh(geometry, material, 1, {restitution: .9, friction: .1});
scene.add(camera);
scene.add(player);
player.add(camera);
//give player control of THIS mesh.
setupControls(player);
控件按预期工作,我可以控制播放器网格,将相机粘在上面创建 FPS 视图,但是当我这样做时,我仍然可以通过墙壁和其他物体移动。我什至将相机移回 Z 位置以确认发生了什么,我可以看到玩家网格只是穿过物体,而不是被阻碍或撞倒它们。
解决方案?
如果我删除 setupControls(player),那么 Physi.js 物理开始在玩家网格上工作!它会从重力下坠落,四处弹跳等等。它看起来很酷,但现在我无法控制它!看来我只能拥有一个或另一个大声笑。那么有谁知道我能做些什么来解决这个问题?我所提出的甚至可能吗?我是 THREE.js 的新手,因此非常感谢任何输入!