cocos creator 3.6.0 使用 tiled1.9.2地图动态创建RigidBody2D与BoxCollider2D无法实现碰撞

  • Creator 版本: 3.6.0

  • 目标平台:chrome 107

  • 重现方式:

  • 首个报错:
    用tiled1.9.2构建的地图,使用cocos creator3.6.0版本,动态创建刚体碰撞块,一直不成功,无法使得玩家和动态刚体的碰撞,刚体和碰撞盒子的group和groupindex也在项目设置中设定为一致的组,结果依然不发生碰撞,一般会有什么样的原因导致?但是在cocos creator 2.4.2中,这样的方法是正常的。

代码如下:
if (tiledMap == null) {
console.error(‘Tiled map is invalid. Tiled map object = %o’, tiledMap);
}

// 获取瓦片地图大小(纵横瓦片数量乘积,非整张地图像素大小。例如:chap01为24x24)、瓦片尺寸、阻挡层
let tileSize = tiledMap.getTileSize()
let layerHinder: TiledLayer = tiledMap.getLayer(groupName);

if (layerHinder == null) {
console.error(‘Tiledmap layer of hinder is invalid.’);
}

// 获取阻挡层瓦片尺寸
let layerHinderSize = layerHinder.getLayerSize();

// 遍历相关瓦片并添加碰撞检测:从宽度到高度做检测,相当于遍历一个二维数组。
for (let i = 0; i < layerHinderSize.width; i++) {
for (let j = 0; j < layerHinderSize.height; j++) {
// 获取瓦片单元
let tiled: TiledTile = layerHinder.getTiledTileAt(i, j, true)!;

    // 元素存在则设置刚体
    if (tiled.grid != 0) {
        let body:RigidBody2D = tiled.node.addComponent(RigidBody2D);  // 动态添加RigidBody2D刚体
        body.type = ERigidBody2DType.Static;  // 设置为静态,防止下落
        tiled.node.name = 'hinder'; // 将这个节点设置为wall
        body.group = 2;// 此处为索引设置为2了
        body.name = 'hinder';
        
        let collider: BoxCollider2D = tiled.node.addComponent(BoxCollider2D); // 添加碰撞区域
        
        collider.offset = v2(tileSize.width/2, tileSize.height/2)  // 设置偏移量, 除2是为了拿到中心点
        collider.size = tileSize; //包围盒的大小
        collider.group = 2;
        collider.name = 'hinder';
        collider.apply();  //回调
    }
}

}

代码里头没看到给刚体和碰撞器设置group 呀

这段代码我给错了,是改造的一版,我重新提供一份出来

因为是测试代码,所以没有规范的,先帮忙看看逻辑有没有问题

没看出有什么问题,可以先打开物理信息绘制看看碰撞器的位置,看看是不是因为锚点位置的导致的。

嗯,锚点可能是有问题的,这个我倒是还没有去确认

这两天又重新看了一下锚点的位置,之前我记得我重新确认过,锚点一直是在(0.5,0.5)没有问题