I found some odd behavior while using an Area2D to mark tiles to toggle them on/off. On the first toggle (starting with tiles on), get_overlapping_bodies() detects the TileMap, but after removing/adding the tiles back in it doesn't. I set up a test project and found the same thing happens when removing/adding a RigidBody2D in static mode, but in kinematic mode the RigidBody2D gets detected. I also found that after moving the Area2D back and forth 1px, it is able to detect the TileMap and static RigidBody2D.

Moving the Area2D is fine for my use case but I'm just curious if this is intended and/or why this works differently for kinematic vs. static or TileMap?

In the test project, "ui_up" attempts to toggle the tile, "ui_down" attempts to toggle the RigidBody2D, and "ui_right" moves the Area2D back and forth.

It works on the physics engine, so it will detect when things move based on physics. If you manually move (or hide show nodes) this exists outside the physics engine, and is not reliable. You can try to toggle and node by enabling or disabling the physics on the body, I think that would work but I haven't tried it.

    cybereality Ok, thanks. I tried using set_physics_process(false) for the RigidBody2D and the Area2D is able to detect it after turning it back on. Good to know for future reference.

    I changed up my code to keep a reference to the TileMap and use (tilemap.get_cellv(tilemap.world_to_map(point)) >= 0) for detecting the tiles.