【问题标题】:Unity Multiplayer: Standalone clientUnity Multiplayer:独立客户端
【发布时间】:2017-12-01 07:46:33
【问题描述】:

我正在研究 Unity 多人游戏支持。从所有文档看来,主要模型似乎是让游戏能够同时成为服务器和客户端,并且两者使用相同的二进制文件。

是否有可能制作一个客户端和服务器是两个不同二进制文件的游戏:客户端更轻量级并且只执行客户端部分,而服务器负责处理开放世界/游戏玩法/状态等繁重的工作?

作为一个简化的示例,想象一个由角色组成的巨大世界,而客户端是一个移动应用,只需要显示他们的健康/统计数据并渲染他们的头像。在服务器上,这些角色在大型环境中过着复杂的生活。

【问题讨论】:

  • 是的,你甚至可以使用 UNET(Unity 多人游戏服务),你也可以使用其他非官方的统一服务
  • 那太好了。您能否指出任何可以帮助我开始使用这种方法的资源?

标签: unity3d networking multiplayer


【解决方案1】:

您可以使用 SmartFoxServer(支持 unity3d)之类的东西来完全独立于客户端逻辑的服务器操作。这将是客户端上的 C# Unity 和 SmartFoxServer 上的 Java。在服务器中配置扩展、管理房间、大厅、用户事件、聊天等并在客户端获取事件非常容易。您可以构建一个完整的 MMO 系统并在移动设备上运行它。

【讨论】:

  • 那么这是否意味着它将完全自定义网络实现而不使用内置的 NetworkManager/Identity 等?
  • 在服务器端,它与 Unity3D 无关。您必须继承 SmartFoxServer 提供的基本扩展,但是可以,您可以按照自己的方式对其进行自定义。
【解决方案2】:

所以我相信我找到了一种方法,至少它对我有用。 我需要的是可以使用 NetworkClient 和 NetworkServer 类。所以现在我有两个独立的项目,服务器和客户端。 服务器有一个脚本,差不多:

public class Server : MonoBehaviour {
public Text text;
public class HelloMessage : MessageBase
{
    public string helloText;
}

void Start () {
    NetworkServer.Listen(4444);
    NetworkServer.RegisterHandler(333, onHelloMessage);

}

public void onHelloMessage(NetworkMessage msg)
{
    text.text = msg.ReadMessage<HelloMessage>().helloText;
}
}

这会侦听端口 4444 上的消息。

那么客户端是这样的: 公共类网络管理器:MonoBehaviour { NetworkClient 客户端;

public class HelloMessage : MessageBase
{
    public string helloText;
}

// Use this for initialization
void Start () {
    client = new NetworkClient();
    client.Connect("127.0.0.1", 4444);

}

public void SendNetworkMessage()
{
    HelloMessage msg = new HelloMessage();
    msg.helloText = "Hello";
    client.Send(333, msg);
}

}

现在在服务器端,我们可以将text 连接到标签,在客户端将SendNetworkMessage 连接到按钮,我们可以从客户端发送消息以显示在服务器上。

现在只需要定义一个协议就可以了。

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2011-04-09
    • 2011-09-11
    相关资源
    最近更新 更多