Javascript,ThreeJS - 碰撞光线投射

时间:2018-06-13 13:37:27

标签: javascript three.js collision raycasting

我正在编写一个Three.js Jump'n'Run游戏并且无法实现玩家碰撞(z和x轴)。目标是达到地图的最高点,同时不应该通过对象。因此,我使用raycaster不会穿过物体(立方体),这部分到目前为止工作。我仍然没有找到实现水平碰撞的方法。 任何想法/建议/解决方案?

另一个简短的问题 - 在我们的案例中如何设置起点的位置坐标?

任何帮助将受到高度赞赏! :)

演示:http://www.unet.univie.ac.at/~a1169112/sealevel/sealevel.html

github:https://github.com/f3lixl3nz/anvis/tree/master/sealevel

        function animate() {

            requestAnimationFrame( animate );

            if ( controlsEnabled === true ) {

                raycaster.ray.origin.copy( controls..getObject().position );
                raycaster.ray.origin.y -= 10;

                var intersections = raycaster.intersectObjects( objects );

                var onObject = intersections.length > 0;

                var time = performance.now();
                var delta = ( time - prevTime ) / 1000;

                velocity.x -= velocity.x * 10.0 * delta;
                velocity.z -= velocity.z * 10.0 * delta;

                velocity.y -= 9.8 * 100.0 * delta; // 100.0 = mass

                direction.z = Number( moveForward ) - Number( moveBackward );
                direction.x = Number( moveLeft ) - Number( moveRight );
                direction.normalize(); // this ensures consistent movements in all directions

                if ( moveForward || moveBackward ) velocity.z -= direction.z * 800.0 * delta;
                if ( moveLeft || moveRight ) velocity.x -= direction.x * 800.0 * delta;

                if ( onObject === true ) {

                    velocity.y = Math.max( 0, velocity.y );
                    canJump = true;

                }

                controls.getObject().translateX( velocity.x * delta );
                controls.getObject().translateY( velocity.y * delta );
                controls.getObject().translateZ( velocity.z * delta );

                if ( controls.getObject().position.y < 10 ) {

                    velocity.y = 0;
                    controls.getObject().position.y = 10;

                    canJump = true;

                }

                if(water) {

                    water.material.uniforms.time.value += delta;

                }               
                prevTime = time;
            }   
            renderer.render( scene, camera );           
        }

0 个答案:

没有答案