cc.director.getPhysicsManager().testAABB(rect) 在使用时检测到的碰撞体 如果碰撞体本身存在角度 明明没碰到 但是检测出来缺碰撞到了
因为AABB包围盒就是不包含旋转的,不管你看到的是什么角度,它始终是一个角度,得用obb
在没有角度的方块周围的圆点击了是正常的 但是存在角度的点击了就存在问题
好的 谢谢 我看一下
嗯嗯 第一次弄这个 就发现角度的问题 但不确定是不是角度的问题
现在确定了
我想问下 obb这个是怎么用的
我建议直接用多边形组件+然后搭配事件检测。就不用考虑这么多了
一开始我用的是碰撞回调 但是这种方法不稳定 因为这个方块后面试可以动的
以下为AI生成代码
在Cocos Creator 3.X中,你可以使用物理系统和碰撞器组件来实现2D物理多边形和圆形的碰撞检测。下面是一个简单的示例脚本,可以在碰撞发生后执行一次检查:
const { ccclass, property } = cc._decorator;
@ccclass
export default class CollisionDetection extends cc.Component {
@property(cc.PhysicsPolygonCollider)
polygonCollider: cc.PhysicsPolygonCollider = null;
@property(cc.PhysicsCircleCollider)
circleCollider: cc.PhysicsCircleCollider = null;
onEnable() {
// 注册碰撞回调
cc.director.getCollisionManager().enabled = true;
cc.director.getCollisionManager().enabledDebugDraw = true;
cc.director.getCollisionManager().enabledDrawBoundingBox = true;
this.node.on(cc.Node.EventType.COLLISION_ENTER, this.onCollisionEnter, this);
}
onDisable() {
// 取消注册碰撞回调
cc.director.getCollisionManager().enabled = false;
cc.director.getCollisionManager().enabledDebugDraw = false;
cc.director.getCollisionManager().enabledDrawBoundingBox = false;
this.node.off(cc.Node.EventType.COLLISION_ENTER, this.onCollisionEnter, this);
}
onCollisionEnter(event: cc.Event.EventCustom) {
const collider = event.detail.collider;
if (collider === this.polygonCollider || collider === this.circleCollider) {
// 执行碰撞后的检查
this.checkCollision();
}
}
checkCollision() {
// 执行碰撞后的检查逻辑
console.log('Collision detected!');
}}
在这个示例中,我们创建了一个名为CollisionDetection的脚本,它包含了一个多边形碰撞器(polygonCollider)和一个圆形碰撞器(circleCollider)。在脚本的onEnable方法中,我们注册了碰撞回调,并在碰撞发生时执行了onCollisionEnter方法。在onCollisionEnter方法中,我们检查碰撞的碰撞体是否是多边形碰撞器或圆形碰撞器,如果是,则执行checkCollision方法进行碰撞后的检查逻辑。
你可以将这个脚本添加到你的2D物体上,并将多边形碰撞器和圆形碰撞器分别赋值给polygonCollider和circleCollider属性。当两个碰撞器发生碰撞时,会触发checkCollision方法,并在控制台输出"Collision detected!"。
请注意,这只是一个简单的示例,你可以根据你的具体需求进行适当的修改和扩展。另外,你可能还需要在物理系统中设置相应的碰撞组件、物理材质等属性,以确保正确的碰撞检测。
论坛能不能加个代码阅读器。。。
好的 理解了 非常感谢
好的 谢谢


