使用版本 cocos 2.3,
我想通过点击屏幕的位置来控制3D物体的位置, 但是这个getscreentoworldpoint 方法一直转化不到不到正确的坐标, 有谁有案例可以参考一下吗?
论坛里面搜索一下
就是没搜到才提问的, 只搜到了 getworldtoscreenpoint()方法, 但是getscreentoworldpoint就怎么用都不正确,真头疼
um 我刚来Cocos这里,但是在Unity那边有一点点经验。。。据我所知你说的这种操作是通过沿摄像机和触摸点在空间中的对应点确定的直线发出一条射线,然后检测这条射线与哪个物体相撞来实现的。
感觉这个和这个是你在找的东西。
谢谢 刚刚有想到射线, 官方有个射线的案例中有点和这个相似,我去研究下,只是关于getscreentoworldpoint 还是有些不解
希望可以帮到你
谢谢 这个有看过,只使用了 getworldtoscreenpoint ,没有使用getscreentoworldpoint , 还是实现不了
通过 射线的方式 完美解决了这个 需求,原理:已知向量起点+距离+方向 ,求终点坐标
touchMove(e){
//通过触摸屏幕的位置 来控制3D物体的位置 (camera有倾角)
let tpos = e.getLocation();
let ray = this.camera3D.getRay(tpos);
let root = this.node.parent.parent;
let res = (cc as any).geomUtils.intersect.raycast(root, ray)//只能检测带有mesh 的节点
let spos = ray.o; //射线起点
let vec = ray.d; //射线方向
let dist = 0; //射线距离
for (let index = 0; index < res.length; index++) {
let result = res[index];
if (result.node.name === “Ground”) {//检测地面距离
dist = result.distance;
break;
}
}
vec.normalizeSelf().mulSelf(dist);
let wpos = vec.add(spos);
let lpos = this.node.parent.convertToNodeSpaceAR(wpos)
this.node.position = cc.v3(lpos.x, 0, lpos.z);
}