Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 JooZ · Apr 11, 2014 at 02:35 PM · networkingplayerclientauthoritative

How to display player ID on client sides?

Hi,

I followed this great tutorial to build a multiplayer application with a specific server and each client being a player: http://3dgep.com/?p=4609

In a fully authoritative mode, I don't know how to send specific variables (I mean other than the position/rotation of the transform) to each player. For example, to display the player ID on each player (cube), I've been doing the following in a ServerPlayerManager (server-side):

    Hashtable players = new Hashtable();
 
     public void spawnPlayer(NetworkPlayer player) {
         Debug.Log("Spawning player game object for player " + player);
         PlayerInfo ply = GameObject.FindObjectOfType(typeof(PlayerInfo)) as PlayerInfo;
         GameObject go = (GameObject)Network.Instantiate(ply.playerPrefab, Vector3.up*3, Quaternion.identity, 0);
         players[player] = go;
 
         networkView.RPC("setID", RPCMode.All, player);
     }
 
     [RPC]
 
     void setID(NetworkPlayer player) {
         GameObject go = (GameObject)players[player];
         cubeScript cSript = (cubeScript)go.GetComponent<cubeScript>();
         cSript.ID = player.ToString();
     }
 

In my cube/player prefab, I attached a script (observed by a NetworkView) with a public variable ID, which I link to a TextMesh.

Problem: On the server side, each cube has its own label displayed correctly. BUT on the client side - it does not work.

It looks like the reason is that the Hashtable "players" is empty on the client side - so the code cannot reach specifically each player displayed to update the correct ID.

Can somebody help on that?

Thanks!

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
2

Answer by JooZ · Apr 12, 2014 at 02:16 AM

OK. Not sure if anyone is interested, but I found my answer and post it here in case somebody arrived later with the same question.

The trick here is be able to get access to the networkView of the prefab itself and to call a function from there towards every other player or server.

What I had above as setID function needs to be moved in the script attached to the player prefab:

 [RPC]
 void setID(NetworkPlayer player)
 {
     this.ID = player.ToString();
 }

Then in my SpawnPlayer function above, where I instantiate the players from the server, I need to do an RPC from the prefab of the script itself. Something like:

 Hashtable players = new Hashtable();
     
 public void spawnPlayer(NetworkPlayer player) {
     
   Debug.Log("Spawning player game object for player " + player);
   PlayerInfo ply = GameObject.FindObjectOfType(typeof(PlayerInfo)) as PlayerInfo;
   GameObject go = (GameObject)Network.Instantiate(ply.playerPrefab, Vector3.up*3, Quaternion.identity, 0);
   players[player] = go;
     
   NetworkView remoteNetworkView = go.networkView;
   remoteNetworkView.RPC("SetID", RPCMode.AllBuffered, player);
 }

So the difference from what I was doing previously is the networkview on which I was running an RPC.

Comment
Add comment · 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

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

21 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

Related Questions

How to check when a new client/local player is loaded? 1 Answer

Authoritative vs Non-authoritative server (turn-based) 0 Answers

Player Object Not Spawning 0 Answers

SetClientOwner m_ClientAuthorityOwner alread set! 2 Answers

Instantiated object from client player not moving when spawned. How can I fix this? 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