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

相关推荐
时间之里3 小时前
【图像处理3D】:焦距的像素单位标定
图像处理·数码相机·3d
JoannaJuanCV5 小时前
BEV和OCC学习-5:数据预处理流程
深度学习·目标检测·3d·occ·bev
虾球xz13 小时前
CppCon 2015 学习:3D Face Tracking and Reconstruction using Modern C++
开发语言·c++·学习·3d
JoannaJuanCV13 小时前
BEV和OCC学习-3:mmdet3d 坐标系
3d·occ·bev
lingling00914 小时前
3D视觉重构工业智造:解码迁移科技如何用“硬核之眼“重塑生产节拍
科技·3d·重构
Shan120514 小时前
3Ds Max 2026安装包+教程网盘下载与安装教程指南
数学建模·3d
时间之里14 小时前
【图像处理3D】:世界坐标系
图像处理·数码相机·3d
渲吧云渲染18 小时前
3ds Max 渲染技术突破:一键解锁照片级真实感!
3d
Tiffany_Ho18 小时前
【threejs】每天一个小案例讲解:创建基本的3D场景
3d·three
lingling0092 天前
迁移科技3D视觉系统:重塑纸箱拆垛场景的智能革命
科技·3d