cocos creator碰撞检测2.x>3.x
属性检查器中添加碰撞组件。
·
2.x
属性检查器中添加碰撞组件
脚本新增:
start () {
//开启碰撞
cc.director.getCollisionManager().enabled = true;
}
onCollisionEnter(other,self){
console.log('碰撞触发',other.tag)
}
onCollisionStay(other){
console.log('碰撞持续')
}
onCollisionExit(){
console.log('碰撞结束')
}
3.X
属性检查器中搜索
注意:
- Box2D 物理模块需要先在 Rigidbody 中 开启碰撞监听,才会有相应的回调产生。Builtin 物理模块只需要有碰撞体组件就可以产生碰撞回调。开启方法为,在 Rigidbody2D 的 属性检查器 勾选 EnabledContactListener 属性,如下图所示:
- 回调中的信息在物理引擎都是以缓存的形式存在的,所以信息只有在这个回调中才是有用的, 不要在你的脚本里直接缓存这些信息,但可以缓存这些信息的副本。
- 在回调中创建的物理物体,比如刚体,关节等,这些不会立刻就创建出对应的物体,会在整个物理系统更新完成后再进行这些物体的创建。
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);
}
}
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('处理逻辑',selfCollider,otherCollider,contact);
// }
// onPostSolve(selfCollider:Collider2D,otherCollider:Collider2D,contact:IPhysics2DContact | null){
// console.log('碰撞结束处理逻辑',selfCollider,otherCollider,contact);
// }
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐
已为社区贡献1条内容
所有评论(0)