【问题标题】:Unity network chat, need a way around command to update chatUnity 网络聊天,需要绕过命令来更新聊天
【发布时间】:2016-08-25 06:38:07
【问题描述】:

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

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

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

UpdateChat() 简单地绘制出带有新消息的同步列表。 这目前适用于一台服务器和一台客户端,因为我可以通过客户端授权生成聊天对象。客户端需要授权才能向其服务器版本发送命令。但是我还没有想出(或者确定我想)如何将聊天对象的权限授予所有客户。

我只是不这样做吗?寻找其他方法?有一个分配所有者的功能,但尚未弄清楚它是如何工作的,或者它是否只会授予对本地版本的权限。我假设我不能拥有多个所有者。

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

【问题讨论】:

    标签: c# networking unity3d


    【解决方案1】:

    我实现这一点的方法是为播放器预制件提供一个脚本,该脚本处理从 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2017-04-15
      相关资源
      最近更新 更多