项目前提
我的THREE.js游戏的想法是玩家通过迷宫般的物体导航并到达出口。我不仅需要对立方体和球体进行碰撞检测,还需要从Blender导入的模型。我想过使用RayCasting但我决定选择Physi.js。
问题
,想法是给相机一个"身体"这样当玩家只是一个相机对象时,玩家就无法通过墙壁或其他物体。但是,我的玩家"一旦我给它THREE.PointerLockControls( player ),对象似乎就失去了所有的Physi.js属性。我正在做的是创建一个Physijs.BoxMesh,播放器,并添加相机。之后我通过了#34;播放器"对象我的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(播放器),那么Physi.js物理开始在播放器网格上工作!它将从重力下降,反弹和一切。它看起来很酷,但现在我无法控制它!好像我只能有一个或另一个哈哈。那么有谁知道我能做些什么来解决这个问题呢?我甚至可以提出什么?我是THREE.js的新手,所以非常感谢任何输入!