pie*_*sse 1 mesh collision-detection babylonjs
我想要一个事件,当相机触摸网格时,它会移动到其他地方,例如门户。
这是我的相机:
function MaCamera(scene, positionCx, positionCy, positionCz)
{
var freeCamera = new BABYLON.FreeCamera("FreeCamera", new BABYLON.Vector3(positionCx, positionCy, positionCz), scene);
freeCamera.rotation = new BABYLON.Vector3(0.5, 0, 0);
freeCamera.attachControl(canvas, true);
freeCamera.checkCollisions = true;
scene.activeCamera = freeCamera;
}
Run Code Online (Sandbox Code Playgroud)
这是我的网格:
var drawMirror = BABYLON.Mesh.CreateBox("rectangle", 1, scene);
drawMirror.scaling = new BABYLON.Vector3(12, 0.1, 20);
drawMirror.rotation.x = Math.PI / 2;
drawMirror.position = new BABYLON.Vector3(positionMx, positionMy, positionMz);
drawMirror.checkCollisions = true;
Run Code Online (Sandbox Code Playgroud)
通过转动 BabylonJS 中的本机碰撞检测,您可以使用回调实现相机网格碰撞。
首先,开启全局碰撞检测:
//Enable global collisions
scene.collisionsEnabled = true;
//Enable camera collisions
camera.checkCollisions = true;
//Enable mesh collision (per mesh)
drawMirror.checkCollisions = true;
Run Code Online (Sandbox Code Playgroud)
二、设置相机的onCollide方法:
camera.onCollide = function(collidedMesh) {
if(collidedMesh.uniqueId === drawMirror.uniqueId) {
//set the new camera position
camera.position = new BABYLON.Vector3(13,37,42);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个展示其工作原理的快速游乐场。http://www.babylonjs-playground.com/#1VLOU4
这是解决此问题的多种方法之一,这完全取决于用例。请注意,设置相机的椭球体非常重要 - 这是与相机一起移动的边界框。根据该边界框检查碰撞。