我正在尝试为我的坦克2D游戏(Unity)构建在线游戏服务器。在我的游戏中,会有2-4个玩家控制他们的坦克并互相对抗。
我已经尝试过使用Unity网络功能,但它并不适合我的游戏,因为我们必须选择房间中的一个玩家成为“服务器”,这对于我的未来开发并不够灵活(例如,当“服务器”退出时,我必须做很多工作来保持其他玩家之间的连接)。
然后,我尝试使用Nodejs加socket.io构建自己的服务器进行服务器-客户端通信。这非常简单:从一个客户端接收数据并广播到其他客户端。看起来一切都很正常,直到物理部分出现问题:当客户端报告某些东西被击中或爆炸时,服务器必须信任客户端,并将其广播给其他客户端。更不用说那些作弊的客户端了,由于网络延迟,客户端的物理模拟将有所不同。例如,坦克在一个客户端上可能被击中,但在另一个客户端上却找了个墙角躲了起来,还活着,但在它身后的坦克却被子弹打中并爆炸了,这是由于延迟引起的。在这种情况下,服务器不知道应该听谁的。
更新:
正如@Catwood在下面提到的,Photon PUN对我来说是另一个选择。我之前已经按照他们的教程进行了一些尝试。Photon不需要像Unity网络那样选择一个玩家作为“服务器”。但是,我该如何在服务器上实现我的游戏逻辑?(用于权威服务器)
显然,Smartfoxserver是另一个好的(而且价格高昂的)选择。我还没有深入研究过它们的API文档。我不知道我是否可以在上面实现我的游戏逻辑和规则(他们的教程为简单起见跳过了这个部分)。
总之,我需要建议我的游戏服务器:
- 是权威服务器 - 可以处理游戏规则并决定会发生什么(也许它应该有自己的物理引擎) - 与Unity2D良好兼容 - 最好使用Javascript,C#,Java!
我是否走在正确的方向上,因为似乎某些游戏服务器服务(例如Photon、Unity网络)并不关心如何在服务器上实现游戏逻辑?这是否使它们不成为权威服务器?
我对这个领域非常陌生,任何建议都将不胜感激!
我已经尝试过使用Unity网络功能,但它并不适合我的游戏,因为我们必须选择房间中的一个玩家成为“服务器”,这对于我的未来开发并不够灵活(例如,当“服务器”退出时,我必须做很多工作来保持其他玩家之间的连接)。
然后,我尝试使用Nodejs加socket.io构建自己的服务器进行服务器-客户端通信。这非常简单:从一个客户端接收数据并广播到其他客户端。看起来一切都很正常,直到物理部分出现问题:当客户端报告某些东西被击中或爆炸时,服务器必须信任客户端,并将其广播给其他客户端。更不用说那些作弊的客户端了,由于网络延迟,客户端的物理模拟将有所不同。例如,坦克在一个客户端上可能被击中,但在另一个客户端上却找了个墙角躲了起来,还活着,但在它身后的坦克却被子弹打中并爆炸了,这是由于延迟引起的。在这种情况下,服务器不知道应该听谁的。
更新:
正如@Catwood在下面提到的,Photon PUN对我来说是另一个选择。我之前已经按照他们的教程进行了一些尝试。Photon不需要像Unity网络那样选择一个玩家作为“服务器”。但是,我该如何在服务器上实现我的游戏逻辑?(用于权威服务器)
显然,Smartfoxserver是另一个好的(而且价格高昂的)选择。我还没有深入研究过它们的API文档。我不知道我是否可以在上面实现我的游戏逻辑和规则(他们的教程为简单起见跳过了这个部分)。
总之,我需要建议我的游戏服务器:
- 是权威服务器 - 可以处理游戏规则并决定会发生什么(也许它应该有自己的物理引擎) - 与Unity2D良好兼容 - 最好使用Javascript,C#,Java!
我是否走在正确的方向上,因为似乎某些游戏服务器服务(例如Photon、Unity网络)并不关心如何在服务器上实现游戏逻辑?这是否使它们不成为权威服务器?
我对这个领域非常陌生,任何建议都将不胜感激!