-
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(); //回调
}
}
}