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 高斯泼溅
3d·空间计算·高斯泼溅
军军君012 小时前
Three.js基础功能学习十一:动画与音频
前端·javascript·3d·js·threejs·三维
CG_MAGIC4 小时前
3ds Max 2026 新功能详解:USD 工作流与重新拓扑工具应用
3d·效果图·建模教程·渲云渲染·渲云
咯哦哦哦哦4 小时前
image_to_world_plane 如何计算校正图像(rectified image)的尺寸、比例(Scale)、位姿(Pose)
人工智能·计算机视觉·3d
syker4 小时前
3D游戏引擎Bluely Engine 开发手册
开发语言·3d·游戏引擎
大江东去浪淘尽千古风流人物4 小时前
【Embodied】具身智能基础模型发展
人工智能·机器学习·3d·机器人·概率论
博图光电5 小时前
应对无序分拣挑战?博图3D视觉智能方案引领柔性制造新变革
数码相机·3d·制造
新启航光学频率梳7 小时前
高铁制动盘冷却深孔孔深光学3D轮廓测量-激光频率梳3D轮廓技术
科技·3d·制造
新启航光学频率梳8 小时前
高频 PCB 多层板盲埋孔孔深光学 3D 轮廓测量 - 激光频率梳 3D 轮廓技术
科技·3d·制造
Ulyanov1 天前
PyVista战场可视化实战(一):构建3D战场环境的基础
开发语言·python·3d·tkinter·gui开发