Yes, they can… If you don’t care about a certain functionality being authoritative, any client can call an RPC with RPCMode.All or RPCMode.Others.
What DigitalZombie claims in that thread is just plain wrong.
For instance, in my game I handle animations non-authoritatively. So when a client starts walking, he sends an RPC with RPCMode.All the play the walk animation on his character model. Works just fine.
Thats odd. Because I can’t seem to replicate that exact functionality.
On the client, Network.connections is always has a length of 1, whereas Network.connections on the server always has the proper number of clients + servers. Is this inconsequential?
One additional question, say a client makes an RPC to all other clients. How do you determine which machine originated the RPC, or do you have to pass identifying info within the actual call itself?
That’s weird… what are you trying to do? Give me some code samples and I’ll try and help you out. Or I can give you my animations script and you can see if it works for you. But I’ve definitely had 4 players playing, syncing their animation states with RPCMode.All and it works fine.
You can determine the origin of an RPC call if need be by passing a NetworkMessageInfo struct with the function, and then accessing the sender var of the NetworkMessageInfo object.
From the docs:
@RPC
function PrintText (text : String, info : NetworkMessageInfo)
{
Debug.Log(text + " from " + info.sender);
}