2017-02-24 1 views
0

Ich habe ein kleines Multiplayer-Spiel mit Unity. Als Host (Auto namens NiciBozz) sieht es wie folgt aus: Host viewUnity-Benutzernamen werden nicht angezeigt

Das ist in Ordnung, aber als Client (hier genannt NiciBot) sieht es wie folgt aus: Client View

Der Kodex zu den Benutzernamen bezogen werden:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.Networking; 
using UnityEngine.UI; 
[NetworkSettings(channel = 1, sendInterval = 0.2f)] 

public class PlayerControll : NetworkBehaviour 
{ 
    public Text Name; 

    [SyncVar] 
    public string playerName; 

    private void Start() 
    { 
     if (isLocalPlayer) 
     { 
      CmdChangeName(PlayerPrefs.GetString("Name")); 
     } 
    } 

    [Command(channel =1)] 
    private void CmdChangeName(string name) 
    { 
     if (!isLocalPlayer) 
     { 
      Name.text = name; 
      playerName = name; 
      SetDirtyBit(1); 
      return; 
     } 
     Name.text = name; 
     playerName = name; 
     SetDirtyBit(1); 
    } 
} 

Was soll ich tun, um die Benutzernamen richtig zu synchronisieren?

Antwort

0

Es scheint, dass Sie nur den Namen zu setzen versuchen, wenn isLocalPlayer wahr ist, aber in CmdChangeName haben Sie einen if, die den Wert von isLocalPlayer (die immer true auf Ihrem Schnipsel basiert wird) überprüft.

Rufen Sie CmdChangeName woanders an?

+0

Nein, aber es wird nichts ändern, da der Inhalt der gleiche ist. – NiciBozz

+0

Dann, wie zeigt sich das "ASDFASDF" über den Autos? –

+0

ist der Standardtext des Elements ui.text – NiciBozz

0

Nutzen Sie syncVar mit Befehl Etwas wie folgt aus:

[SyncVar]//server to client. sync this variable name across all clients 

    public string localPlayerName = "Player"; 

    void OnGUI() 
    { 
     if (isLocalPlayer) 
     { 
      localPlayerName = GUI.TextField(new Rect(0, 0, 100, 20), localPlayerName); 

      if (GUI.Button(new Rect(110, 0, 100, 20), "Name")) 
      { 
       CmdUpdateLocalPlayerName(localPlayerName); 

      } 
     } 
    } 

    [Command]//client to server 
    void CmdUpdateLocalPlayerName(string userName) 
    { 
     localPlayerName = userName; 
    }