In a client-server-based game with 32 players there are 33 realities. One for each player, and the server's.
The server is the king and ruler of the game world, and what the server says is true, is true.
So, what does this have to do with you as a player? Well, UE-netcode uses serverside hit detection. Simply put this means that if it takes 100 milliseconds for an update packet from the server to reach your computer, then the server will be 100 milliseconds ahead of you. If you react to whatever the server tells you happens, it will take another 100 milliseconds for your reaction to reach the server. In short, by the time you have seen a player move into view and pressed the fire button at least 100 milliseconds (0.1 seconds) will have passed before your serverside avatar actually fires, and 200 milliseconds will have passed since the other player's serverside avatar moved into the view of your serverside avatar.
Getting around this is impossible without inventing faster-than-light communication. Some games try to fake it (such as Battlefield2) by trying to predict the difference between the client reality and the server reality and moving the clientside ingame avatars accordingly. This, however, brings with it its own set of problems. Pronespamming and dolphindiving in BF2 is mainly an effort to **** up the relationship between avatar and hitbox for the player shooting at you by abusing the clientside prediction. In UE-powered games you don't have this problem, as the reality you see is simply the serverside reality with a certain timedelay. Other games use clientside hit detection (IE bullet impacts are not calculated serverside, the client simply says to the server "hey, I hit that guy"), which is a method that makes it far easier to make 3rd party hacks that enable you to cheat.
Personally, I prefer the UE way of doing things. I'm decent enough at doing my own clientside prediction in my head, thank you.