Raycaster 对象未定义 mouseover Three.js

所以我用mousemove设置了raycaster来改变光标效果很好!但是,只有当鼠标悬停在模型上方或框本身上方时,它才会按预期工作,如果您将鼠标悬停在没有任何东西的空白处,它会中断并且发生未定义的错误......所以如果我将鼠标悬停在改变了光标到一个指针然后移开它但是鼠标然后悬停在它工作的框后面的模型上并且光标变为自动但是如果我在悬停在没有任何东西的框上后悬停到空白区域光标仍然是一个指针而不是改为自动


function onDocumentMouseMove(event) {


    event.preventDefault();

    var mouse = new THREE.Vector2();

    mouse.x = (event.clientX / window.innerWidth) * 2 - 1;

    mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;


    raycaster.setFromCamera(mouse, camera);


    var intersects = raycaster.intersectObjects(scene.children, true);



    if (intersects[0].object.name == 'MaBox') {

        container.style.cursor = 'pointer';

        console.log('Mouse is over')

    } else {


        container.style.cursor = 'auto';

        console.log('Mouse is off')

    }

}

错误:


未捕获的类型错误:无法读取 HTMLDocument.onDocumentMouseMove 处未定义的属性“对象”


有什么建议么?


月关宝盒
浏览 159回答 1
1回答

蓝山帝景

您需要检查数组是否intersects为空。否则,没有 index 的元素0。像这样的东西:    var intersects = raycaster.intersectObjects(scene.children, true);    if (intersects.length > 0) { // check the array        if (intersects[0].object.name == 'MaBox') {            container.style.cursor = 'pointer';            console.log('Mouse is over')        } else {            container.style.cursor = 'auto';            console.log('Mouse is off')        }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript