Вопрос решен. Можно перебрать каждую ячейку и наложить на нее пустой node, ну и соответственно наложить на каждый node физику по текстуре самой ячейки.
class GameScene: SKScene {
var ground : SKTileMapNode!
override func didMove(to view: SKView) {
self.ground = self.childNode(withName: "//ground") as! SKTileMapNode
let tileSize = self.ground.tileSize
for col in 0..<self.ground.numberOfColumns {
for row in 0..<self.ground.numberOfRows {
let definition = self.ground.tileDefinition(atColumn: col, row: row)
guard let texture = definition?.textures.first else {
continue
}
let x = CGFloat(col) * tileSize.width + tileSize.width / 2.0
let y = CGFloat(row) * tileSize.height + tileSize.height / 2.0
let tileNode = SKNode()
tileNode.position = CGPoint(x: x, y: y)
tileNode.physicsBody = SKPhysicsBody(texture: texture, size: texture.size())
tileNode.physicsBody?.affectedByGravity = false
tileNode.physicsBody?.isDynamic = false
self.addChild(tileNode)
}
}
}
}
В данном примере scaleMode сцены стоит .resizeFill (так как пишем для macOS)
Сама сцена и слой карты (self.ground) имеет anchorPoint = CGPoint(x: 0, y: 0)
P.S. Пока это тестовый вариант, потому как еще не известно что же будет при больших картах, ну и думаю надо добавить что бы физика ложилась исключительно на крайние ячейки.