我目前正在爲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