Cocos Creator 如何处理物理和碰撞检测?

2023-11-19

Cocos Creator 如何处理物理和碰撞检测?

cocos creator 版本:v3.6.1

Cocos Creator 3.x 实现碰撞检测

        Cocos Creator 通过使用物理引擎来处理物理和碰撞检测。Cocos Creator 默认使用 Box2D 物理引擎,也支持使用 Chipmunk 物理引擎。以下是处理物理和碰撞检测的基本步骤:

    1、创建物理世界:在场景中添加一个物理组件,这将自动创建一个物理世界。

    2、添加刚体组件:在需要添加物理效果的节点上添加刚体组件。刚体是物理世界中的物体,可以设置质量、摩擦力、弹性等属性(点击官方文档查看刚体属性)。

3、添加碰撞体组件:在刚体节点上添加碰撞体组件,用于检测碰撞。Cocos Creator 支持多种类型的碰撞体,如矩形、圆形、多边形等(点击官方文档查看碰撞组件)

    4、处理碰撞事件(碰撞回调函数):通过添加碰撞回调函数,在节点之间发生碰撞时执行相应的逻辑。可以在碰撞回调函数中获取到碰撞的详细信息,如碰撞体的类型、碰撞点、碰撞法线等(点击官方文档查看碰撞回调)。

下面是一个简单的例子,演示如何在 Cocos Creator 中处理物理和碰撞检测:

    5、创建一个场景,并添加一个物理组件。

    6、在场景中添加两个节点,都分别添加刚体碰撞体组件:

在这里插入图片描述
        按照需求选择对应刚体类型(点击官方文档查看刚体类型)
刚体类型

    7、开启碰撞监听:

    只有开启了刚体的碰撞监听,刚体发生碰撞时才会回调到对应的组件上

在这里插入图片描述

//代码开启
rigidbody.enabledContactListener = true;

    8、在其中一个节点上添加一个碰撞回调函数:

@ccclass('TestContactCallBack')
export class TestContactCallBack extends Component {
    start () {
        // 注册单个碰撞体的回调函数
        let collider = this.getComponent(Collider2D);
        if (collider) {
            collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
            collider.on(Contact2DType.END_CONTACT, this.onEndContact, this);
            collider.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);
            collider.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);
        }

        // 注册全局碰撞回调函数
        if (PhysicsSystem2D.instance) {
            PhysicsSystem2D.instance.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
            PhysicsSystem2D.instance.on(Contact2DType.END_CONTACT, this.onEndContact, this);
            PhysicsSystem2D.instance.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);
            PhysicsSystem2D.instance.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);
        }
    }
    onBeginContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
        // 只在两个碰撞体开始接触时被调用一次
        console.log('onBeginContact');
    }
    onEndContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
        // 只在两个碰撞体结束接触时被调用一次
        console.log('onEndContact');
    }
    onPreSolve (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
        // 每次将要处理碰撞体接触逻辑时被调用
        console.log('onPreSolve');
    }
    onPostSolve (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
        // 每次处理完碰撞体接触逻辑时被调用
        console.log('onPostSolve');
    }
}

    说明:注意刚体类型一定要选择好,两个节点都是static是无法触发碰撞回调(查看不同刚体类型响应限制条件)

        不同类型的刚体之间,并非都可进行碰撞,其结果整理如下:

Static Dynamic Kinematic Animated
Static
Dynamic
Kinematic
Animated

    9、将代码添加到节点中,如下:
在这里插入图片描述
    10、结果显示
在这里插入图片描述
    可以通过缓动系统移过蓝色五角星,代码比如:

tween(this.node.getChildByName("Block")).to(1,{
    	position:new Vec3(200,0,0)
 }).start();

        通过以上步骤,就可以在 Cocos Creator 中处理物理和碰撞检测。可以通过调整刚体、碰撞体的属性以及添加更多的碰撞回调函数,来实现更加复杂的物理效果和碰撞检测。

最后,如果有些需求不要物理碰撞效果的话,在Collider2D(如BoxCollider2D),设置属性:sensor
sensor : boolean 一个传感器类型的碰撞体会产生碰撞回调,但是不会发生物理碰撞效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cocos Creator 如何处理物理和碰撞检测? 的相关文章

  • ue4 蓝图通信的几种方式

    一 设置公有变量 完成通信 1 蓝图类Door bp中声明变量NewVar 1 为公有 确定好变量类型 编译 2 关卡视口中选中这个蓝图类Door bp的实例 世界大纲视图下的细节面板中 默认下出现公有变量名称NewVar 1 用吸管吸取关
  • unity2D横版游戏教程10-场景控制

    我们让角色掉出地图时重置游戏 我们在Hierarchy那里创建一个一个空项目 命名为DeathLine 也就是死亡线 我们给它添加一个盒体碰撞器 调整一下碰撞器 我们要把这个碰撞器当做触发器使用 所以我们勾选Is Trigger 我们既然用
  • unity 停止调用InvokeRepeating()的方法

    可以使用CancelInvoke 函数来停止InvokeRepeating 的调用 示例如下 声明一个float类型的变量用来存储调用Invokerepeating 的时间间隔 public float repeatTime 2 0f vo
  • UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解 参考 AttributeSet是设置玩家属性的比如生命值 最大生命值 GameplayEffe
  • 全局光照算法:reflective shadow maps

    1 技术理解 RSM的全称是reflective shadow maps 受到Instant Radiosity这个离线技术的启发 其思想和ShadowMap的思想近似 在正式介绍和了解这个技术之前 我需要确定RSM用处何在 我想 RTR4
  • Unity 使用LineRenderer连接2个物体

    1 在Hierarchy面板中创建2个GameObject A和B 这就是希望连接的2个物体 2 同理创建1个EmptyObject C 挂上LineRenderer组件 记得给Materials赋值 3 创建1个新的C 脚本LineMan
  • HTML5游戏实战(2):90行代码实现捕鱼达人

    捕鱼达人是一款非常流行的游戏 几年里赚取了数以千万的收入 这里借用它来介绍一下用Gamebuilder CanTK开发游戏的方法 其实赚钱的游戏未必技术就很难 今天我们就仅用90来行代码来实现这个游戏 CanTK Canvas ToolKi
  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • CocosCreator之KUOKUO带你做小小赛车-摄像机跟随

    本次引擎2 0 5 编辑工具VSCode 目标 小小赛车 先亮素材 很简单 就两个 爱给网中的赛道 以及一个小车 好了 让我们新建工程然后把赛道放进去 调整方向与大小 然后把小车拖上去 这样 我是把赛道放大了2倍 旋转了90度 拖一拖位置
  • ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial UE5 Starter Course 教程大小解压后 4 96G 语言 英语 中英文字幕 机译 时长 4小时56分 1920X1080 mp4 虚
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • UE4 解决景深效果闪烁问题

    原因 1 模型的垂直竖线 造成抗锯齿算法对竖线的渲染计算 处于一种不稳定的状态 因此闪烁 解决办法 使用LOD 用贴图去替代线条模型 2 材质的法线贴图 当法线贴图含有垂直竖线的纹理效果 也会造成闪烁 比如这种幕墙材质 解决办法 关闭或动态
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志

随机推荐

  • Spring ioc容器创建过程(1)BeanFactory初始化

    文章目录 一 ApplicationContext 二 常见的ApplicationContext 三 ioc容器的初始化 1 AbstractApplicationContext prepareRefresh 2 AbstractAppl
  • C# GC原理

    在 NET框架包含一个托管堆 所有的 NET语言在分配引用类型对象都要使用它 像值类型这样的轻量级别对象始终分配在栈中 但是所有的类实例和数组都被生成在一个内存池中 这个内存池就是托管堆 垃圾收集器的托管的基本算法很简单 1 将所有的托管内
  • 老毛桃 安装linux双系统,安装CentOS 7双系统(二)——安装过程step by step

    上一篇中我们确定了分区方案之后 就可以开始安装双系统啦 前期准备 重点 装系统之前一定要准备一个U盘启动盘 出问题时候可以马上进PE恢复 血的教训 我建议对磁盘进行分区 重建MBR等操作都在PE里面完成 制作U盘启动工具可以使用大白菜 大白
  • 【DBeaver】介绍DBeaver这一款强大的数据库连接工具

    近期在工作中需要使用到国产的达梦数据库 我们使用DBeaver作为数据库连接工具 DBeaver是一款很强大的数据库连接工具 其适用于所有的数据库 支持所有流行的关系数据库 MySQL PostgreSQL SQLite Oracle DB
  • UI设计师有钱途还是平面设计师或者是网页设计师呢?

    UI设计 平面设计和网页设计 哪个前景更好呢 其实ui和网页设计都属于平面设计里的一个分支 举个例子 设计一份饭店的点菜单 一样的图案 印刷出来是传统平面设计 放网站上是网页设计 放手机上显示是UI 其实都是一样的平面美术设计 那么有人要问
  • Vscode

    文章目录 点击左下角的用户或者设置的 Sign in to Sync Setting 使用GitHub或者Microsoft账户登录 就能开启同步功能
  • 【目标检测】34、FSAF: Feature Selective Anchor-Free Module for Single-Shot Object Detection

    文章目录 一 背景 二 方法 2 1 Ground truth and loss 2 2 Online Feature Selection 2 3 将 RetinaNet 和 FSAF 联合后如何训练和测试 三 效果 论文 Feature
  • 中文姓名、电话、邮箱的正则表达式

    1 中文姓名 如 张三 噶及 洛克业 a zA Z0 9 u4e00 u9fa5 1 10 2 电话验证 如 010 85369999 186199999 0 d 2 3 d 7 8 d 3 5 13 14 15 18 17 d 9 3 电
  • QT连接Mysql后的简单操作(增删改查)

    连接数据库 首先要连接自己在电脑上安装的MySql的数据库 这个是最难也是最重要的一步 万事起步难 连接上了之后的Sql语句就会就会非常简单了 连接数据库可以参考这篇博客 注意在连接时会有可能会有很多报错信息 但是只要按照这个操作来 一步一
  • nc命令使用

    一 nc介绍 netcat 简称 nc 安全界叫它瑞士军刀 官网地址 Ncat Netcat for the 21st Century nc 的基本功能如下 telnet 获取系统 banner 信息 传输文本信息 传输文件和目录 加密传输
  • 通俗易懂web3.0

    目录 前言 一 WEB1 0 二 WEB2 0 三 WEB3 0 区别 最后 前言 大家好 我是清风 互联网连接了人与人 在过去的30年中 互联网技术不断进化 演化 向纵深发展 政治 经济 社交 生活 工作已经几乎离不开互联网 我们经历了W
  • 云计算导论(第二版)李伯虎著全部课后题的答案

    目录 第一章 绪论 1 联系自己身边的生产生活实践 试列举2 3个你认为正在运用或者可以运用云计算的例子 2 你认为云计算对个人与社会带来了什么样的影响 3 分析云计算服务和云计算平台的区别和联系 4 云计算与 创新 协调 绿色 开放 共享
  • LangChain 是一个强大的框架,可以简化构建高级语言模型应用程序的过程。

    LangChain 是一个强大的框架 可以简化构建高级语言模型应用程序的过程 What is LangChain LangChain是一个强大的框架 旨在帮助开发人员使用语言模型构建端到端的应用程序 它提供了一套工具 组件和接口 可简化创建
  • 禁用触摸板

    sudo rmmod psmouse 这个是禁用的 sudo modprobe psmouse 这个是启用的
  • Failed to load response data:No data found for resource with given identifier

    一 遇到问题 最近项目中表单提交需求遇到了这个问题 Failed to load response data No data found for resource with given identifier 翻译 加载响应数据失败 找不到具
  • 《疯狂Java讲义》读书笔记(一)

    面向对象具有三个基本特征 封装 Encapsulation 继承 Inheritance 和多态 Polymorphism 继承是面向对象实现软件复用的重要手段 当子类继承父类 子类作为一个特殊的父类 将获得父类所有的属性和方法 封装是指将
  • 使用curl或wget连接网站的怎样忽略SSL证书错误

    导读 在默认情况下 cURL 使用 SSL 证书进行连接 如果指定的网站配置错误或证书过期 则会引发错误 下面我们看一下如何忽略其中的 SSL 证书错误 当我们使用 curl 命令访问网站的时候 有时候可能会得到一个 SSL 证书错误 这是
  • 大数据面试-05-大数据工程师面试题

    2 HashMap和HashTable ArrayList和Vector ArrayList和LinkedList的区别 1 HashMap不是线程安全的 hashmap是一个接口 是map接口的子接口 是将键映射到值的对象 其中键和值都是
  • 基于rt2860v2的wifi探针

    实验室有块7620a的板子 之前做过探针方面的试验 rt2860v2的驱动源码来自网络 探针是基于这份源码做的试验 最初在驱动中采集的数据是通过proc节点送到应用层 但是发现数据的实时性啥的不够好 改用了netlink方式 有感兴趣的同学
  • Cocos Creator 如何处理物理和碰撞检测?

    Cocos Creator 如何处理物理和碰撞检测 cocos creator 版本 v3 6 1 Cocos Creator 3 x 实现碰撞检测 Cocos Creator 通过使用物理引擎来处理物理和碰撞检测 Cocos Creato