I think this question has already been asked, but i would like to discard possibilities.
My approach with water is using an Area 2D and when the Player, a Kinematic2D entity, enters the Area, it's gravity lowers and other movement-dampening operations happen within the player code, the swim mechanics are similar to super mario bros, you can tap the jump button to swim upwards and "fight" gravity, the caveat i have so far is that when the player approaches the upper part of the area 2d, it's fricction stays the same, it doesn't have to "breakthrough" the water area to exit it, instead of having a force of some sorts that maintains it on the surface of the water area. The approach that i'm considering to use is to modify player code to set it's y velocity in such a way that when it enters a "water surface area" the y velocity auments slightly, but then how can i implement it with other non-Kinematic2D entities without having too much code?, or is there a way to "push" kinematic2D bodies down as if it were a rigidbody2D?