I got the weapon to rotate, though its not great. What I did was remove the networktransform and network identity from the weapon object. Then added a [SyncVar] tag to a rotation variable. Here’s what I did. It might not be the best, but the movement shows up on the other clients.
“Previously only player objects could have local authority, which meant that the NetworkTransform (and other components) could only be used for controlling the single player object for a connection on a client. With these changes it is possible to have multiple objects on a client that are locally controlled.”
And then it goes on to suggest you can now do it via using NetworkServer.SpawnWithClientAuthority() or NetworkIdentity.AssignClientAuthority().
However, so far, these calls can only be made on a server, and AssignClientAuthority() only works if the server spawned the object, and in a test I just ran, it doesn’t count spawning the player and the network identity being a child. It seemingly must be spawned as a separate object with SpawnWithClientAuthority(). So much for using prefabs with multiple network components.
I expect SpawnWithClientAuthority() might work for you well though. You need to register your weapons as prefabs with the server.
However it of course needed a [Command] to send the rotation to the server where it could change the syncvar to propogate to all clients ( as SyncVars are server to client only) which means all that extra traffic going through the server. (I was thinking the network transform was a bit smarter and able to send peer to peer - but I guess that’s wrong?).
I’ll dig around now to understand how to only keep the latest command, because in a congested network I don’t want a bunch of redundant data being sent.