2016-04-30 55 views
0

我正在聯合進行在線遊戲聊天。它是通過一個預製的ChatObject來完成的,它包含一個腳本以及繪製文本和窗口所需的所有內容。該聊天包含一個帶有最後30條消息的SyncListString,這是從服務器同步到客戶端,但不是相反。統一報價「,這是命令的工作」Unity網絡聊天,需要圍繞命令更新聊天的方式

[Command] 
void CmdUpdateChatAcross(string message) 
{ 
    UpdateChat(message); 
    RpcUpdateChat(); 
} 

[ClientRpc] 
void RpcUpdateChat() 
{ 
    UpdateChat(""); 
} 

UpdateChat()只是用新消息繪製同步列表。 這對於一個服務器和一個客戶端來說當前工作正常,因爲我可以用客戶端授權產生聊天對象。客戶端需要授權才能將命令發送到服務器版本。但我還沒有弄清楚(或者肯定我想)如何將聊天對象的權限授予所有客戶端。

我只是不這樣做嗎?尋找另一種方式?有一個功能可以分配給所有者,但還沒有弄清楚它是如何工作的,或者它是否只授予當地版本的權限。正如我假設我不能擁有多個所有者。

服務器可以發送消息到所有客戶端沒有問題。但我無法讓玩家正確地將他們的消息發送到服務器。

回答

0

我完成這個的方法是給玩家預製一個處理從UI傳遞消息到服務器的腳本。這是因爲播放器對象總是可以向服務器發送命令。所以,你有你的用戶界面對象,從玩家的一些輸入。它提供了一個本地播放器上的劇本,我們將調用NetworkPlayerBridge

public class NetworkPlayerBridge : NetworkBehaviour 
{ 
    //Call this from your chat window object on the local player 
    public void BroadcastChat(string msg) 
    { 
     CmdBroadcastChat(msg); 
    } 

    [Command] 
    public void CmdBroadcastChat(string msg) 
    { 
     //send this message to the chat window on the server and place 
     //it in a SyncList so that all clients will be updated 
    } 
}