我目前正在为Unity游戏构建我自己的网络代码(用于学习体验),而且我正在对事情的“解码数据包”方面发生严重的延迟。在多人游戏中,如何有效地通过套接字发送位置数据?
基本上,我有playerObject
将位置数据(Vector3(x,y,z))作为JSON字符串发送到服务器,服务器将其发回给所有其他玩家。
东西的插座边很漂亮。从创建数据包到收到数据包时的延迟非常小。
但我上午让我的客户一个巨大的延迟,当他们试图取消JSON的远程客户端的位置:
Vector3 remotePos = JsonUtility.FromJson<Vector3>(_command.Substring(5 + _usernameLength));
JSON字符串有字符串的开头的标识符说它是一个位置更新,然后是两个数字,表示用户名的长度,然后是用户名(以便远程客户端可以更新正确的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;
}
所有这些“作品”,但变得非常低迷后刚刚3个客户端同时连接。
我在做什么错?必须有一个重大的缺陷,因为我每3秒钟只发送0.015秒的更新时间,而像“战地”这样的游戏每秒可以发送60次更新给64名玩家!
任何意见,将不胜感激。
至少举动'JsonUtility.FromJson'在'if' –
我很怀疑反序列化JSON在这种情况下,造成这种巨大的影响 – Evk
@Evk我指望收到的数据包,同时计数json'd包。我接收数据包的速度是我能够快速发送的速度的三倍。这意味着东西落后。 – MrDysprosium