1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > cocos creator 3.x 2d物理碰撞检测(不使用物理刚体)

cocos creator 3.x 2d物理碰撞检测(不使用物理刚体)

时间:2021-09-29 01:55:34

相关推荐

cocos creator 3.x 2d物理碰撞检测(不使用物理刚体)

cocos creator 3.x 2d物理碰撞检测(不使用物理刚体)

前言

我含着热泪而来,因为获取不到2d物体的碰撞检测弄了半天。之前一直学2.x,后面学了3.x版本,发现对于新手来说,蛮多需要去适应的,最主要的是引擎一直在更新,然后在网上为数不多的教程又更新很慢,而且大部分教程都是老接口,试了好多接口都不行。

官方2d物理检测文档:点击这里

在文档中只有脚本代码

步骤1:修改为‘内置2D物理系统’,不然无法进行碰撞检测

官方解析:Cocos Creator 支持内置的轻量 Builtin 物理系统和强大的 Box2D 物理系统。Builtin 物理系统只提供了碰撞检测的功能,对于物理计算较为简单的情况,我们推荐使用 Builtin 物理模块,这样可以避免加载庞大的 Box2D 物理模块并构建物理世界的运行时开销。而 Box2D 物理模块提供了更完善的交互接口和刚体、关节等已经预设好的组件。

你可以根据需要来选择适合自己的物理模块,通过编辑器主菜单中的 项目 -> 项目设置 -> 功能裁剪 切换物理模块的使用。

步骤2:创建两个单色节点,并且添加cc.BoxCollider2D (2d的物体用的都是2D的组件 )

步骤3:添加两个分组,并且勾选碰撞矩阵

步骤4:设置bule节点为bule分组,yellow为yellow分组

步骤5:创建一个phycisc.ts脚本,挂载在blue节点上,并且让两个节点挨在一起

import {_decorator, Component, Node, Collider, EPhysics2DDrawFlags, RigidBody, Constraint, PhysicsSystem2D, BoxCollider, director, Contact2DType, Collider2D, IPhysics2DContact, BoxCollider2D, PolygonCollider2D } from 'cc';const {ccclass, property } = _decorator;@ccclass('phycisc')export class phycisc extends Component {onLoad() {//绘制物理信息PhysicsSystem2D.instance.enable = true;PhysicsSystem2D.instance.debugDrawFlags = EPhysics2DDrawFlags.Aabb |EPhysics2DDrawFlags.Pair |EPhysics2DDrawFlags.CenterOfMass |EPhysics2DDrawFlags.Joint |EPhysics2DDrawFlags.Shape;// 注册单个碰撞体的回调函数let collider = this.node.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);}}onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {// 只在两个碰撞体开始接触时被调用一次console.log('onBeginContact', otherCollider);}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');}}

输出结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。