オブジェクトをクリックしてオブジェクトを選択し、非モーダルダイアログをポップアップしてオブジェクトに関する情報を表示する必要があります。ただし、ユーザーがダイアログを含むGUIアイテムをクリックしてオブジェクトがある場合、3つのjsオブジェクトが選択され、ポップアップ内の情報が変更されます。3つのjs GUIを介したレイキャストピッキングの防止
ここにスニペットがあります。
document.addEventListener('mousedown', onDocumentMouseDown, false);
jQueryのダイアログ・ジェネレータ:
function createDialog(title, text, top) {
return $("<div class='dialog' title='" + title + "'><p id='bodyText'> " + text + "</p></div>")
.dialog({ position: { my: ("right" + 0 + "top+" + top), at: "right top" },
close : setDialogNull, });
}
れるonmousedown機能:
function onDocumentMouseDown(e) {
e.preventDefault();
console.log(dialog);
var mouseVector = new THREE.Vector3();
mouseVector.x = 2 * (e.clientX/window.innerWidth) - 1;
mouseVector.y = 1 - 2 * (e.clientY/window.innerHeight);
var raycaster = new THREE.Raycaster();
raycaster.setFromCamera(mouseVector, camera);
var intersects = raycaster.intersectObjects(objectCollection);
if (intersects.length > 0) {
var selectedObject = intersects[0];
console.log("Intersected object", intersects[0]);
selectedObject.object.material = (selectedObject.object.material.wireframe) ? selectedBoxMaterial : unselectedBoxMaterial;
var text = intersects[0].distance;
var title = "Shelf info";
if (dialog == false) {
createDialog(title, text, offset);
offset = offset - 50;
console.log(offset);
dialog = true;
console.log(dialog);
}
if (dialog == true) {
{jQuery("#bodyText").text(text);
}
}
}
その他のGUI要素がdat.GUIで作成されます。
ほとんどの結果はUnityについてのものであり、経験豊富な開発者ではありませんが、私はそれらにどのように適応するのか分かりません。