首页 > 其他分享 >cocosCreator234版本物理射线使用

cocosCreator234版本物理射线使用

时间:2024-09-24 10:25:19浏览次数:1  
标签:const cc results cocosCreator234 射线 点击 let touchPos 版本

物理射线使用总结

 

适用:

引擎:cocost creator 2.3.4

 

充分条件:

1:物理分组要开放碰撞功能,如地板分组为ground。则:

 

 

必须勾选才行。

2:地板上要挂碰撞体:

 

 

可以不加物理刚体。

3:必需开篇3D物理引擎:

cc.director.getPhysics3DManager().enabled = true;

 

实现方法:

1:点击测试,取得点击位置下击中的3D物体;

//点击时触摸位置://e: cc.Event.EventTouch

const touchPos = e.touch.getLocation();

 

// 根据点击的点获取一条由屏幕射向屏幕内的射线

        let ray = Camera3D.getRay(touchPos);

        let results = cc.geomUtils.intersect["raycast"](GameManager.instance.StackContainer.node, ray, this.handler);

        let currentNode = null;

        // 根据传入的根节点向下检测,并返回检测结果

        // 返回的结果包含了节点和距离

        for (let i = 0; i < results.length; i++) {

            const gridBase: GridBase = results[i].node.parent.getComponent(GridBase);

        }

 

 

2:鼠标移动时,获取鼠标在3D空间内的坐标:

private checkClickPos(touchPos: cc.Vec2) {

        //获取点击位置,把点击位置转化为相机下的3D节点位置

        const mousePos = cc.v3(touchPos.x, touchPos.y, 0);

        //用摄像机做转换,将触摸点转换到游戏中的世界坐标

        let out = cc.v3();

        GameManager.instance.Camera3D.getScreenToWorldPoint(mousePos, out);

        // 构造一条从原点出发,指向 Z 轴的射线

        const outRay = new cc.geomUtils.Ray();

        // 获取相机的位置

        let cameraPosition = GameManager.instance.Camera3D.node.convertToWorldSpaceAR(cc.v3(0, 0, 0));

 

        cc.geomUtils.Ray["fromPoints"](outRay, cameraPosition, out);

        const results:cc.PhysicsRayResult[]

 = cc.director.getPhysics3DManager().raycast(outRay, "ground", 1000, false);

        if (results && results.length > 0) {

            //从世界坐标,获取某个节点中的本地坐标

            let localPos = GameManager.instance.StackContainer.node.parent.convertToNodeSpaceAR(results[0].hitPoint);

            return localPos;

        }

        return null;

    }

 

标签:const,cc,results,cocosCreator234,射线,点击,let,touchPos,版本
From: https://www.cnblogs.com/luogyie/p/18428553

相关文章

  • 【idea】log4j和slf4j配合使用问题(2024-9-23最新版本)!
    1、slf4j<!--https://mvnrepository.com/artifact/org.slf4j/slf4j-simple--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version......
  • 判断质数(小白秒懂版本)短时间记忆二分模板
    给定 n个正整数 ai,判定每个数是否是质数。输入格式第一行包含整数 n。接下来 n 行,每行包含一个正整数 ai。输出格式共 n行,其中第 i行输出第 i个正整数 ai是否为质数,是则输出 Yes,否则输出 No。数据范围1≤n≤100,1≤ai≤231−1输入样例:226输出样例:Yes......
  • Karmada新版本发布,支持联邦应用跨集群滚动升级
    摘要:本次升级支持联邦应用跨集群滚动升级,使用户版本发布流程更加灵活可控;透明同事karmadactl新增了多项运维能力,提供独特的多集群运维体验。本文分享自华为云社区《Karmadav1.11版本发布!新增应用跨集群滚动升级能力》,作者:云容器大未来。Karmada是开放的多云多集群容器编排引擎......
  • Rocksdb 7.0.0 ~ 7.10.2 重要版本特性
    7.9.0(2022-11-21)现在可以提供对宽列数据模型的基本支持。可以使用API存储宽列实体PutEntity,并使用GetEntity和迭代器的新columnsAPI进行检索。为了兼容,经典APIGet和MultiGet以及迭代器的valueAPI返回宽列实体的匿名默认列的值;此外,GetEntity和迭代器的APIcolumns以仅具......
  • 直接通过修改二进制文件OpenSSH和OpenSSL的版本为最高版版本来达到形式主义等保要求的
    文章开头的解释和说明本篇文章是通过形式上修改二进制文件中的版本号来达到某些像行尸走肉机器人类形式主义要求的等保标准要求,来完成其要求的“安全加固”。我先吐槽一下,这些形式主义等保标准要求,只按照版本号比对来确定是否为最版本的检测逻辑来批量扫描,扫描出来的漏洞误报率......
  • Android实战之组件化中如何进行版本控制和依赖管理
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点GitSubmodules是Git的一个功能,它允许你将一个Git仓库作为另一个Git仓库的子目录。这个功能在组件化开发中非常有用,因为它允许你将项目分解为多个独立的模块,每个模块都......
  • Vue 3.5 版本“天元突破红莲螺岩”(Tengen Toppa Gurren Lagann)
    探讨Vue3.5中的一些关键更新。1.响应式属性解构在Vue3.5中,从props和emits中解构出来的属性默认就是响应式的。这意味着你不再需要手动使用toRefs或toRef来使解构的属性具有响应性。例如:import{defineComponent}from'vue';exportdefaultdefineCom......
  • Git 工作区、暂存区和版本库
    基本概念我们先来理解下Git工作区、暂存区和版本库概念:工作区:就是你在电脑里能看到的目录。暂存区:英文叫stage或index。一般存放在 .git 目录下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是......
  • 鼠标射线拾取
    图例图1-1拾取步骤先把鼠标点击的(X,Y)从屏幕坐标系转成webgl坐标系。然后再把webgl坐标系通过投影逆变换转成投影坐标系,得到(X,Y)在投影坐标系下的值(Xw,Yw,Zw)。把(Xw,Yw,Zw)减去相机的坐标得到射线的方向向量(起点是相机的坐标,知道起点和方向就可以得到一条无限长的射线)。......
  • 如何下载旧版本app或者旧版本的电脑软件?下载旧版本手机app和电脑软件的方法
    下载旧版本软件的方法介绍,下面以下载旧版本剪映为例:......