大きなプレーン(地面)をクリックしたときに、レイキャスター(マウス)の位置にオブジェクト(立方体)を追加できる簡単なゲームを作っています。私はそのオブジェクト(立方体)をお互いに置くことはできません。私は単純な衝突検出を行った。これを行うにはこれが最善の方法ではないことは分かっていますが、これは私がやっていることを理解する方法です。私は初心者です。Three.js衝突検出の問題
次のコードでは、両方のオブジェクトの位置を確認します。これらの位置で私はそれの間の距離をチェックする。距離が4098(64 * 64)より小さい場合は、オブジェクトをシーンに追加します。
function onDocumentMouseDown(event) {
event.preventDefault();
mouse.x = (event.clientX/renderer.domElement.clientWidth) * 2 - 1;
mouse.y = - (event.clientY/renderer.domElement.clientHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(clickObjects);
var intersects2 = raycaster.intersectObjects(objects);
if (intersects.length > 0) { // Clicking on the ground?
if (intersects2.length > 0) { // Clicking on an object?
}else{
var geometry = new THREE.BoxGeometry(64, 64, 64);
var cube = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({ color: 0xFBF5D7, opacity: 1 }));
cube.position.copy(intersects[0].point);
cube.position.y = 30;
cube.flipSided = true;
cube.doubleSided = true;
var validposition = true;
var i;
for (i = 0; i < objects.length; i++) {
var dx = cube.position.x - objects[i].position.x;
var dy = cube.position.y - objects[i].position.y;
var dz = cube.position.z - objects[i].position.z;
var distance = dx*dx+dy*dy+dz*dz;
if(distance < 4096) {
validposition = false;
}
}
if(validposition == true) {
objects.push(cube);
scene.add(cube);
}
}
}
}
問題は、正方形オブジェクトの場合にのみ問題になるということです。誰も私がどのようにTHREE.BoxGeometry(64, 64, 400)
のような長方形のオブジェクトのための方法で考えることができますか?ありがとう
ありがとうございました。この例は本当に役立ちます。私はあなたがしたことを理解しています。私はこのコードを使用しようとします。今私はどのように私がparseInt(cube.style.left)を使用できるかを考え出しています。私の目的のために –