2016-04-30 48 views
0

私はオンラインゲームのためにチャットを行っています。これは、スクリプトと、テキストとウィンドウを描画するために必要なすべてを含むプレハブChatObjectで行われます。チャットには最後の30個のメッセージを含むSyncListStringが含まれていますが、これはサーバーからクライアントに同期されますが、それ以外の方法では同期されません。ユニティネットワークチャット、チャットを更新するコマンドを回避する必要があります

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

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

UpdateChat(「コマンドの作品である」統一引用)は、単純に新しいメッセージと同期リストを引き出します。 これは、クライアント認可を使用してチャットオブジェクトを生成できるので、現在、1つのサーバーと1つのクライアントで正常に動作します。クライアントは、サーバーバージョンのサーバーにコマンドを送信する許可が必要です。しかし、チャットオブジェクトの権限をすべてのクライアントに与える方法を理解していない(または確信しています)。

私はそれをしないのですか?別の方法をお探しですか?所有者を割り当てる機能はありますが、それがどのように機能するか、またはローカルバージョンに対してのみ権限を与えるかどうかはわかりません。私が仮定するように、私は複数の所有者を持つことはできません。

サーバーは問題なくすべてのクライアントにメッセージを送信できます。しかし、プレイヤーにメッセージをサーバーに正しく送信させることはできません。

答えて

0

私がこれを達成したのは、プレイヤーにUIからサーバーへのメッセージの受け渡しを処理するスクリプトをプレハブすることです。これは、プレーヤーオブジェクトが常にサーバーにコマンドを送信できるためです。だから、あなたは、プレーヤーからの入力を取るあなたの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 
    } 
} 
関連する問題