我正在研究Unity多人游戏支持。从所有文档看来,似乎主要模型是游戏能够同时作为服务器和客户端,以及用于两者的相同二进制文件。
是否有可能制作一个游戏,其中客户端和服务器是两个不同的二进制文件:客户端更轻量级,只做客户端部分,而服务器负责处理开放世界/游戏/状态等?
作为一个简化的例子,想象一个由人物填充的巨大世界,而客户端是一个移动应用程序,只需要显示他们的健康/统计数据并渲染他们的头像。在服务器上,这些角色在大型环境中过着复杂的生活。
答案 0 :(得分:1)
您可以使用类似SmartFoxServer(支持unity3d)的服务器操作,完全独立于客户端逻辑。这将是客户端上的C#Unity和SmartFoxServer的Java。在服务器中配置扩展,管理房间,大厅,用户事件,聊天等非常容易,并在客户端获取事件。您可以构建一个完整的MMO系统并在移动设备上运行它。
答案 1 :(得分:0)
所以我相信我找到了一种方法,至少它对我有用。 我需要的是使用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上的消息。
然后客户端是这样的: 公共类NetworkManager: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
连接到一个按钮,我们可以从客户端发送消息以显示在服务器上。
现在只需要定义一个协议,我们就去了。