我正在为一个团结的在线游戏聊天。它是使用预制的ChatObject完成的,其中包含一个脚本以及绘制文本和窗口所需的一切。聊天包含一个带有最后30条消息的SyncListString,它从服务器同步到客户端,但不是相反。统一引用"这是命令的工作"
[Command]
void CmdUpdateChatAcross(string message)
{
UpdateChat(message);
RpcUpdateChat();
}
[ClientRpc]
void RpcUpdateChat()
{
UpdateChat("");
}
UpdateChat()只是用新消息绘制同步列表。 这目前适用于一个服务器和一个客户端,因为我可以使用客户端授权生成聊天对象。客户端需要授权才能将命令发送到服务器版本。但我还没想到(或者我确定我想)如何给所有客户端提供聊天对象的权限。
我不这样做吗?找另一种方式?有一个功能可以分配所有者但是没有弄清楚它是如何工作的,或者它是否只赋予本地版本权限。我认为我不能拥有多个所有者。
服务器可以毫无问题地向所有客户端发送消息。但我无法让玩家正确地将他们的消息发送到服务器。
答案 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
}
}