我正在使用C#和Monogame开发一个MMORPG.现在,我正在为它开发网络协议.我应该注意到我是CCNA,所以我对两种协议的工作方式都有很好的理解.但是,我过去只编写过单人游戏.但是我试图弄清楚应该使用哪种协议.我最初使用UDP开始实现,并且已成功通过本地网络发送单个数据包,但我担心一旦开始添加越来越多的客户端,UDP可能会动摇.考虑到这是一个游戏连接,我最初得出结论,我需要一个快速,低延迟的连接.但很快意识到我需要发送的一些数据包可以开始测量大小的KB,例如当客户端进入地图上的新区域时,
我的问题是那些在制作多人游戏方面经验丰富的人:即使TCP的开销较大,是否值得使用它,或者通过UDP调整游戏协议的可靠性?
我目前正在为Unity游戏构建我自己的网络代码(用于学习体验),并且我在"解码数据包"方面遇到了一些严重的延迟.
基本上,我playerObject将它们的位置数据(Vector3(x,y,z))作为JSON字符串发送到服务器,然后服务器将其发送回所有其他播放器.
事物的插座方面很顺利.从创建数据包到收到数据包的延迟非常小.
但是,我很让我的客户,当他们试图取消JSON的远程客户端的位置,一个巨大的延迟:
Vector3 remotePos = JsonUtility.FromJson<Vector3>(_command.Substring(5 + _usernameLength));
Json字符串在字符串的开头有一个标识符,表示它是一个Position更新,后跟两个表示用户名长度的数字,然后是用户名(这样远程客户端可以更新正确的playerObject.整个字符串看起来这样的事情.
POS09NewPlayer{"x":140.47999572753907,"y":0.25,"z":140.7100067138672}
从服务器收到此类数据包后,我的客户将执行以下任务:
int _usernameLength = Int32.Parse(_command.Substring(3, 2));
string _username = _command.Substring(5, _usernameLength);
Vector3 remotePos = JsonUtility.FromJson<Vector3>
if (_username != username)
{
playerDict[_username].transform.position = remotePos;
}
Run Code Online (Sandbox Code Playgroud)
所有这些都"有效",但在3个客户端同时连接后变得非常迟缓.
我究竟做错了什么?必须有一个重大的缺陷,因为我只为每个.015秒发送3个玩家的更新,其中像战地这样的游戏可以为64个玩家每秒发送60个更新!
任何意见,将不胜感激.
在多人游戏环境中,哪个 UE4 类最适合存储用户数据?
要求是数据
由于 (1) 和 (2),将其存储在用户 actor 上不是一种选择。我想到的是
PlayerController,但是它在级别之间是否持续存在?PlayerState复制设置COND_OwnerOnly为特定数据,但它在级别之间是否持久?还有其他类更符合上述要求吗?
最近,我一直在阅读有关 Google 的 gRPC 的内容。我想知道对于像多人游戏这样的实时应用程序来说这是否是一个不错的选择。
例如,我们可以使用 gRPC 构建一个用于实时多人游戏的游戏服务器吗?
我正在开发多人游戏,但不知道如何将其他客户端连接到创建的游戏。我的意思是客户端 A 创建到服务器的套接字连接以及其他客户端(A,B ...)如何连接到客户端 A?有人可以帮我吗?
PS我是网络编程的新手,所以如果你能附上一些例子,我将不胜感激。
我无法理解 Photo Engine CCU 的含义以及如何在我的多人游戏中计算它。
谁能解释一下光子如何计数 CCU。
我有一个多人手机游戏的想法.我想过一个浏览器游戏,所以IOS和Android用户都可以玩它.
但我没有得到一些东西......如果我用大多数javascript构建游戏,它对黑客攻击很有攻击性,不是吗?我的意思是,如果我向服务器做一些ajax请求,每个人都可以打开Internet Explorer中的开发人员工具,为请求设置断点并在发送请求之前更改一些数据.
例如:用户在游戏中获得一些钱.现在我想将新的金额发送到服务器以将其保存到数据库中.一些"坏"的男孩可以在发送请求之前更改货币值,并且服务器获得操纵值.
这是正确的我在说什么?或者我可以在游戏中构建任何安全功能?
所以我搜索了一个多平台移动引擎,但我找不到合适的移动引擎.我找到了spaceport.io但它尚未发布.
还有其他我可以使用的引擎吗?
哦......我没有多少钱;-)
前段时间我使用右键单击并在Flash世界中提供真正的功能甚至不可能,3天前我发现通过javascript是完全可能的,可行的
那么,是否有可能制作出像多人电脑游戏一样的Flash游戏?我的意思是,真正的在线游戏,没有延迟,没有滞后.
我听说Flash中的网络代码很糟糕,但是,你知道,我认为这也是关于右键点击...而且我完全错了:).
谢谢.
我正在为Android平台统一制作Checkers游戏。我被赋予使该游戏成为多人游戏并以C#语言实现TCP / IP网络的任务,而对于服务器端,我必须使用Golang。我几乎完成了游戏本身,但是我对服务器和tcp以及如何为我的游戏实现它们一无所知。有什么方法可以启动该程序或教程以显示如何执行该操作?任何建议都会很棒!提前致谢!
multiplayer ×9
c# ×3
go ×2
tcp ×2
flash ×1
game-engine ×1
grpc ×1
java ×1
javascript ×1
mobile ×1
monogame ×1
networking ×1
photon ×1
server ×1
sockets ×1
udp ×1