Situation is very easy. DX engine, called Unreal has important for reality creating things. First of all, water = zone, zone is a place with some properties, different from default one. Default one is air. There are also two properties in water zone: velocity and gravity.
Second one, cats, dogs and etc have exact mass. When the mass of object in Unreal physics is less then gravity, zone puts it out of it. Of course, when object is outside the zone, it gets another properties. Thats why cat after jumping falls down - it is in another zone. And mass of the Unreal engine player is bigger then velocity, thats why we STAND. Mass of player is a BIT smaller then velocity in water zone: that is why player goes up in the water when he dont move (when he moves, his speed is > then velocity, but velocity also affects on speed in water). For example, in UnlimitedParty 2 map, there is a jumping pit. This pit is a zone, where i changed properties, if exactly, property called velocity. And in that pit you feel yourself like a cat
P.S. I don't know if i had mixed velocity with gravity, but IMO, velocity is vector (property) that shows
coef of 'putting out' force and gravity is
coef of 'weight down' force vector (srry, i know how it is called in russian, but not in english; my vocabulary is bad (i mean non-exact) in science language). So, velocity and gravity are vectors, by default (in default zone), gravity is > velocity and by default they're reversed. Correct me if i made a mistake.