Using Tiled Collision Editor with Arcade Physics

I know this has come up in the past, but it seemed like it was focused on non-rectangular or non-square shapes. In my case, I’d like to use rectangular/circular collisions, but I just want to limit the subset of the tile that counts as a collision area.

Currently, I have a bunch of tilesets, where tiles that should be collided with have a “collides” boolean set to true. That bit works fine as expected. I’d like to change the behavior to allow me to specify a subset of the tile I want to collide with. It looks like tiled is picking up on the collision groups from Tiled (the call to tile.getCollisionGroup returns appropriate data). I have used setCollisionfromCollisionGroup, but it just seems to mark the entire tile as collidable, not the specified section. I would expect/hope that Phaser would use the provided collision groups when calculating whether a collision occurred, but it apparently doesn’t. I currently have an addTilemap function (so I can dynamically load maps around the player), which looks something like this:

  addTilemap(map, mapX, mapY) {
    const tilesets = [];
    for (const key in this._TILED_TILESETS) {
      const opts = this._TILED_TILESETS[key];
      const { name, width, height, extrusion, spacing } = opts;
        map.addTilesetImage(name, key, width, height, extrusion, spacing)
    for (const i in this._TILED_LAYERS) {
      const [name, collide, type = "tile"] = this._TILED_LAYERS[i];
      let layer;
      if (type === "tile") {
        layer = map.createLayer(name, tilesets, mapX, mapY);
        if (layer === null) {
          console.error("failed to make layer", name);
        //I have tried both of these. They behave the same
        //if (collide) layer.setCollisionByProperty({ collides: true });
        if (collide) layer.setCollisionFromCollisionGroup();
        layer.forEachTile((tile) => {
          const collisionGroup = tile.getCollisionGroup()
          if (collisionGroup) {
      if (type === "object") {
        const group =;
        layer = map.getObjectLayer(name);
        layer.objects.forEach((object) => {
          const { x, y, width, height } = object;
          const sprite = this.make.sprite({ x: mapX + x, y: mapY + y });
          const offset = {
            x: sprite.originX * sprite.displayWidth,
            y: sprite.originY * sprite.displayHeight,
          if (width) sprite.displayWidth = width;
          if (height) sprite.displayHeight = height;
          sprite.x += offset.x;
          sprite.y += offset.y;
          const data =
            ?, { name, value }) => {
                props[name] = value;
                return props;
              }, {})
            : {};
        layer = group;
      layer._collider = this.physics.add.collider(
        //layer._collider = this.matter.add.collider(

Short of creating a sprite for every tile with a collision group, is there an option to tell Phaser to use the tile’s collision group vs. just the collision property?