A-Frame VR控制器射线检测父级a-sky的raycaster-intersected-cleared事件为何误触发?
问题场景
正在实现移动VR控制器时获取a-sky坐标的功能,当前核心代码结构如下:
<a-scene scenelistener> <a-sky id="map-sky" color="#222" radius="700" rotation="0 45 0" rotation-control raycaster-listen class="ray-castable" > <a-entity id="country-tiles" country-tiles scale="1 1 1" rotation="0 90 0" ></a-entity> </a-sky> <!-- Oculus 实体 --> </a-scene>
已为a-sky及其子实体配置射线监听逻辑,用于在控制台打印射线触发的事件日志,对应的raycaster-listen组件实现如下:
AFRAME.registerComponent("raycaster-listen", { init: function() { this.el.addEventListener("raycaster-intersected", evt => { console.log(`raycaster ${this.el.id} intersected!!!`); }); this.el.addEventListener("raycaster-intersected-cleared", evt => { console.log(`raycaster ${this.el.id} cleared!!!`); }); } });
异常表现
实际运行时,当射线在子实体country-tiles内外移动,子实体与父级map-sky的raycaster-intersected-cleared事件会被同时触发,A-Frame无法正确维持VR控制器射线与a-sky的交集判定,控制台输出日志如下:
raycaster intersected!!! raycaster map-sky intersected!!! // 移出tile区域 raycaster cleared!!! raycaster map-sky cleared!!!
测试提示:本功能面向VR控制器开发,需使用WebXR模拟器完成交互测试。
内容的提问来源于stack exchange,提问作者An Nguyen
相关产品推荐
相关产品推荐

