Each Player Controlle exists in two places: Server and only Owning Client. Thus on your machine you got your Player Controller that is controlling your character. Other characters are being controlled either through net command or something like net controller, I’m not sure and that is not so important.
Server, on the other hand, has all Player Controllers (which are non authoritative btw). So when any player makes something on his side (client side) player controller can replicate from client side, to server side. That is very important property of Player Controller class.
You are absolurtely correct about multicast, it should be called from server (well, authoritative side to be precise), in that case it’ll be called on every object copy, that exist through multiplayer session (if you call multicast on client it’ll work only on that client, btw). But, as Player Controllers do not exist through all clients (only owner and server), you should call your multicast from other class, like character that is replicated.
So now, you have all Player Controllets on server, each has recieved a Vector from a client it is tied to. Each controller has a corresponding character. You have two options:
-
From character you call multicast and set new Vector variable in your Character, that is going to be your aiming point.
-
You set replicated Vector variable in character and set it with Server function in you Character.
To both multicast and Server functions you should pass your coordinate from Player Controller, both those functions should be in Character and be called from character (I assume in tick).