Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Smurfj3 · Jul 17, 2018 at 02:43 AM · rpcclient-servercommand

ClientRpc not working as expected

I edited the whole original post and changed it completely to simplify the problem:

 public class Test : NetworkBehaviour {
 
     NetworkManager manager;
 
     public override void OnStartLocalPlayer()
     {
         CmdUpdateClients();
     }
 
     [Command]
     void CmdUpdateClients()
     {
         if (manager == null)
         {
             manager = GameObject.Find("Network Manager").GetComponent<NetworkManager>();
         }
 
         if(manager.numPlayers == 3)
         {
             RpcAllClients();           
         }
     }     
 
     [ClientRpc]
     void RpcAllClients()
     {
         this.transform.position = new Vector3(0, 0, 0);
     }
 }

Why does the RpcAllClients function not run on all clients, but only on the last client to connect to the server?

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by Bunny83 · Jul 17, 2018 at 05:36 AM

RPCs and commands do not broadcast to all NetworkBehaviours in the scene. Commands and ClientRPCs are bound to the object they are send on / to. That means if a new player object is created on the new client you send a command to the server. This command is only executed on the player object of the new client since a client can only send commands to his own player object. The actual command method will be executed on the server. Here you send a ClientRPC to all clients but again only on the NetworkBehaviour of the new client. So the RPC is executed on all clients but only for the object that represents the new client.


What you can do inside your command on the server is to iterate through all connections, for each connection iterate through all playercontrollers that the specific client has and call your client RPC for each player object.


Note that your approach is generally not recommended. You currently let a client to kick off the reset action for all clients which doesn't make much sense. You probably want to use NetworkManager.OnServerReady to check for the number of players and if the number is right, send the required clientRPCs to the clients

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Smurfj3 · Jul 17, 2018 at 09:44 AM 0
Share

Thanks a lot for your explanation I slowly start to understand the way multiplayer stuff works in Unity but I got to say I find it very complicated and confusing. Can you elaborate on the Network$$anonymous$$anager.OnServerReady approach? From my understanding you mean I have to set every player to ready and then use Network$$anonymous$$anager.OnServerReady to do whatever I want with the clients?

Your help is greatly appreciated!

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

91 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Re-send ClientRPC after new player joins 1 Answer

Networking player input, UI, and ability use 1 Answer

why my cmd function not work? 1 Answer

Unity networking Command-function not being called 1 Answer

How to spawn a multiplayer non-player prefab object and sync with all clients? 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges