需求是在3D场景里 点击屏幕后 创建一个3D物体在点击的位置。。试了半天位置不对劲。
现在是在UI上接收监听,然后转换到世界坐标,位置总是差的很远。
谁有思路呀
就是一个2d坐标转3d坐标吧。
我现在是这样的
let pos = touch.getUILocation
然后Camera.screenToWorld(v3(pos.x,pos.y))
这个world坐标不对。
谢谢 我试试
不对劲 这个role上怎么还有ui组件。
要从摄像机到点击点生成一条射线,这个射线和3D地面的碰撞点就是物体的生成坐标。
我直接一个豁然开朗,谢谢思路
就是射线碰撞点就是可以了
let ray = this.camera.screenPointToRay(touch.getLocationX(), touch.getLocationY());
let comps = this.modelNode.getComponentsInChildren(MeshRenderer);
let distance = Number.MAX_VALUE;
for (let i = 0; i < comps.length; ++i) {
if (comps[i].model) {
let dis = geometry.intersect?.rayModel(ray, comps[i].model!, { mode: geometry.ERaycastMode.CLOSEST, doubleSided: false, distance: Number.MAX_SAFE_INTEGER });
if (dis && dis < distance) {
distance = dis;
}
}
}
if (distance == Number.MIN_VALUE) {
return;
}
let out = v3();
ray.computeHit(out, distance);
谢谢,刚刚楼上也是这样说的 已经成功了 谢谢大家