Can scene objects send RPCs to the server yet?

I remember playing with unet a while ago and my biggest complaint was you could only communicate to the server via the player object. It seems ridiculous for things that can easier be managed with networked scene objects such as global voice/text chat that everyone can talk to the server with

has there been any changes to this functionality?

Oh and is there any way to see bandwidth usage now too? networkserver.getstatsin/out didn’t work at the time

Did you ever figure this out? I am trying to implement some reporting for players to get the stats of their connections. On 5.3, NetworkServer.GetStatsIn returns 0.

Scene objects are owned by the server, so why would they need to send messages?

I think he means he wants the ability for clients to send Commands/Rpcs from a scene object.
This is not available in the UNET Implementation because of the security concerns of clients calling functions on unowned objects, which was a issue in the Legacy Networking system.

You could implement this behaviour in UNET but you would have to modify the source code to allow this scenario.

Again…I ask the question, why would a client need to? The scene objects are owned by the server, just like the player object is owned by the client. (Owned = who has authority over it). If a player wants to “move” a scene object or do something to “destroy” it, then get the objects netId, and send a Command to the server to handle some code, and include that netId in the Command.

Quick slightly unrelated question, as I’m handling things like DRRosen3 described:

When my player wants to “throw” an object, I send inputs to the server and do all the raycasting on the server, move the object server side, and send back the resulting position to the clients, along with the item’s netID.

When I get it back client side, I search the scene for the object

ClientScene.FindLocalObject(netID);

is this the correct way to handle this? The documentation doesn’t really go into how this works, does it work in the same way as GameObject.Find()? Or does it have a list of all “registered” prefabs and check that? If the latter, do all things have to be registered in the NetworkManager as prefabs?

Yes, using ClientScene.FindLocalObject() is the correct way to do GameObject.Find() for a networked game. The only thing that should be in the list of registered prefabs, are objects that you will at some point be Instantiating.

Thanks for clearing that up for me! I was doing it this way but just by chance.