我正在使用Three.jsPointerLockControls来创建简单的FPS游戏。我想做的是在摄像机/控件上安装武器。

我能够将喷枪放置在相机的前面,并沿x / y轴移动,但不沿z轴(向上/向下)移动。

function updateGun() {
    if (weapon) {
        const yaw = controls.getObject();
        weapon.position.set(
            yaw.position.x - Math.sin(yaw.rotation.y) * 3,
            yaw.position.y - 1,
            yaw.position.z - Math.cos(yaw.rotation.y) * 3);

        weapon.rotation.set(
            yaw.rotation.x,
            (yaw.rotation.y - Math.PI),
            yaw.rotation.z);
    }
}

最佳答案

如果您正在使用PointerLockControls并想添加保留在相机前面的对象,则可以使用以下模式:

var mesh = new THREE.Mesh( new THREE.SphereGeometry( 5, 16, 8 ), new THREE.MeshNormalMaterial() );
mesh.position.z = - 100; // some negative number

camera.add( mesh );


如果不使用PointerLockControls,则仍然可以使用相同的技术,只需确保将相机添加为场景的子级即可。

scene.add( camera );
camera.add( mesh );


three.js r.84

07-28 11:04