cocos 触摸2d屏幕拖动3d节点思路

根据屏幕点击的2d坐标,以及3d摄像机,生成一条带方向的3d射线检测,被射线碰撞的物体,就可以获取到射线碰撞到3d物体上的具体坐标点,然后根据这个坐标点设置被拖动3d节点的位置。

核心代码:

javascript 复制代码
//触摸移动
    onTouchMove(event: EventTouch) {

        //射线检测是否碰到其他方块,并修改显示颜色。
        let touchPos = event.getLocation();
        console.log('触摸移动:', touchPos,event.touch);
        if (!this.dragNode) { //有拖拽节点才进行移动。
            return;
        }
        //拖拽
        let point = new Vec3(1, 1, 0);
        // this.dragNode.setPosition(point);

        let ray = this.mainCamera.screenPointToRay(touchPos.x, touchPos.y);
        // console.log('ray',ray,PhysicsSystem.instance.raycastClosest(ray))
        if (PhysicsSystem.instance.raycastClosest(ray)) {
            const res = PhysicsSystem.instance.raycastClosestResult;
            console.log('移动位置:',res.hitPoint)
            const hitNode = res.collider.node;
            // this.dragNode.setPosition(res.hitPoint.x,res.hitPoint.y,res.hitPoint.z);
            this.dragNode.setPosition(res.hitPoint.x,1,res.hitPoint.z);
            if (hitNode.name.startsWith('tiled')) {
                this.cancelTiled();
                hitNode.getComponent(MeshRenderer).material = this.tiledImgActive;
                this.tiledNodeActive = hitNode;

            } else {
                this.cancelTiled();
            }
        } else {
            this.cancelTiled();
        }
    }

核心属性:res.hitPoint

相关推荐
博图光电1 天前
3D TOF 视觉相机:以毫秒级三维感知,开启智能交互新时代
数码相机·3d
GISer_Jing1 天前
OSG多视口与多通道渲染核心技术解析
c++·3d·新浪微博
threelab1 天前
Merge3D:重塑三维可视化体验的 Cesium+Three.js 融合引擎
开发语言·javascript·3d
GISer_Jing2 天前
OSG底层从Texture读取Image实现:readImageFromCurrentTexture
前端·c++·3d
在下胡三汉2 天前
创建轻量级 3D 资产 - Three.js 中的 GLTF 案例
开发语言·javascript·3d
思茂信息2 天前
CST License(Flexnet)设置与问题处理方法
服务器·网络·单片机·3d·php·1024程序员节·cst
我希望的一路生花2 天前
Blender科幻机甲娘莉莉魅魔人物角色3D模型带骨骼动作绑定带贴图
3d·blender·贴图
杀生丸学AI3 天前
【视频生成】GVS:生成式视图拼接
3d·aigc·slam·跨模态·三维重建·视觉大模型·空间智能
CG_MAGIC3 天前
3ds Max材质高清参数设置:10分钟提升渲染真实感
3d·vr·3dmax·材质·vray·渲云渲染
黄思搏4 天前
Unity坐标转换指南 - 3D与屏幕UI坐标互转
ui·3d·unity