I think it uses simple box collision component to detect is object inside water or not, and then switches that object into some “swim” state. How this state implemented in every type of object - is different question. Basically, for pawns/characters, it’s always uses floating pawn movement component, or some modification of flying movement mode.