Unity网络聊天,需要一种方法来更新聊天

时间:2016-04-30 00:52:51

标签: c# networking unity3d

我正在为一个团结的在线游戏聊天。它是使用预制的ChatObject完成的,其中包含一个脚本以及绘制文本和窗口所需的一切。聊天包含一个带有最后30条消息的SyncListString,它从服务器同步到客户端,但不是相反。统一引用"这是命令的工作"

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

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

UpdateChat()只是用新消息绘制同步列表。 这目前适用于一个服务器和一个客户端,因为我可以使用客户端授权生成聊天对象。客户端需要授权才能将命令发送到服务器版本。但我还没想到(或者我确定我想)如何给所有客户端提供聊天对象的权限。

我不这样做吗?找另一种方式?有一个功能可以分配所有者但是没有弄清楚它是如何工作的,或者它是否只赋予本地版本权限。我认为我不能拥有多个所有者。

服务器可以毫无问题地向所有客户端发送消息。但我无法让玩家正确地将他们的消息发送到服务器。

1 个答案:

答案 0 :(得分: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
    }
}