You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新AFRAME的Raycaster交点?解决模型部件点击识别焦点问题

解决AFR Raycaster切换模型部件无需失焦即可更新交点的问题

你的问题出在只使用了raycaster-intersected事件——这个事件仅在射线首次命中模型时触发一次,当鼠标在模型内部的不同部件间移动时,不会再次触发该事件,所以你的self.mousedown始终保留着第一次命中的部件名,必须移出模型再移入才能重新触发事件更新。

下面提供两种可行的解决方法:

方法一:改用raycaster-intersection事件

这个事件会在射线每帧持续命中模型时触发,可以实时获取当前鼠标指向的部件信息:

AFRAME.registerComponent('model1', {
    init: function(){
        let el = this.el;
        let self = this;         
        // 替换为raycaster-intersection事件,实时更新交点
        el.addEventListener('raycaster-intersection', e => {  
            self.raycaster = e.detail.el;
            const intersection = self.raycaster.components.raycaster.getIntersection(el); 
            if (intersection) {
                self.mousedown = intersection.object.name;
            }
        });
        el.addEventListener('click', function(){
            console.log(self.mousedown);
        });
    }
})

方法二:在tick方法中主动更新交点

通过组件的tick方法(每帧执行)主动获取最新的交点信息,确保部件名实时更新:

AFRAME.registerComponent('model1', {
    init: function(){
        let el = this.el;
        let self = this;         
        self.raycaster = null;
        // 记录raycaster实例
        el.addEventListener('raycaster-intersected', e => {  
            self.raycaster = e.detail.el;
        });
        // 射线离开时清空实例
        el.addEventListener('raycaster-intersected-cleared', () => {  
            self.raycaster = null;
        });
    },
    tick: function(){
        if (!this.raycaster) return;
        // 每帧获取最新交点
        const intersection = this.raycaster.components.raycaster.getIntersection(this.el); 
        if (intersection) {
            this.mousedown = intersection.object.name;
        }
    },
    // 点击事件绑定到events字段更符合AFR规范
    events: {
        click: function(){
            console.log(this.mousedown);
        }
    }
})

另外注意:你原代码里有一行多余的});,需要删除,否则会导致语法错误。

内容的提问来源于stack exchange,提问作者Frank Leaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:15:51