发现射线检测问题

1.0.4 builtin
写了一个简单的射线检测拖动模型的功能 在web上正常 微信开发者工具和手机就有问题

具体实现为 监听玩家触摸点下移动取消结束 在点下时 记下位置 移动时计算位置差与开始的位置相加就是新的位置

在电脑上谷歌浏览器上调试 没问题

构建发布后 在微信开发者工具和手机上有问题 具体表现为 拖动到其他地方 ,然后再点击模型 射线无法检测到模型

希望引擎组能帮忙解决下这个问题

要是有想知道的尽管问

不知道怎么发视频?

你好,能否给个稳定复现的 demo 啊

怎么上传呢>?

在谷歌浏览器调试也出现这个问题了

demo.zip (796.4 KB)

请注意 相机是正交

你往上拖动模型 然后放手 然后点击模型打断点 射线只能检测到地板

我个人猜测是 正交相机生成射线时有问题

你用的是哪个做的啊,creator还是creator3d.我用creator3d做的项目没问题啊

把下面注释的代码改成下面的就好了

// let pos = e.touch.getUILocation()
let pos = new Vec2();
e.touch.getLocation(pos);

这个跟适配相关,UILocation 获取的是屏幕空间的坐标,可以看作是 UI 节点的世界坐标,屏幕空间是按照设计分辨率来的,比如你的设计分辨率是 640 x 1136,哪么点击屏幕中心 getUILocation 返回的就是 (320,568)。

目前相机里面计算射线是根据逻辑分辨率来的,比如 iphone 6 的是 375 x 667 , 如果你点击中心,UILocation 依然会根据设计分辨率返回,相对于逻辑分辨率这个时候就不对了,getLocation 是基于逻辑分辨率的,使用这个才可以获得正确的世界空间下的射线。

另外射线检测是纯代数运算,基本不会有问题的

demo.zip (2.6 MB)

在微信开发者工具上还是有问题

改成你这句代码 ,射线完全找不到立方体了

我做的是微信小游戏 也请以微信小游戏为准