2017-02-24 52 views
0

我有一個與Unity的多人遊戲。作爲主機(汽車命名NiciBozz)它看起來像這樣: Host viewUnity用戶名不顯示

這是好的,但作爲一個客戶端(這裏命名NiciBot)它看起來像這樣: Client View

相關的用戶名的代碼:

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); 
    } 
} 

我該怎麼做才能正確同步用戶名?

回答

0

看來你只嘗試設置的名稱,如果isLocalPlayer是真實的,但在CmdChangeName你有一個if,檢查的isLocalPlayer值(這將始終根據您的片斷true)。

你在別處叫CmdChangeName嗎?

+0

不可以,但它不會因爲內容是相同的任何改變。 – NiciBozz

+0

那麼這個「ASDFASDF」如何顯示在汽車之上? –

+0

它是ui.text元素的默認文本 – NiciBozz

0

利用syncVar與命令事情是這樣的:

[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; 
    }