2016-12-30 38 views
0

我正在爲使用Unity 5構建的開放式世界遊戲構建多玩家服務器。我選擇了Socket.IO作爲實時框架因爲我比任何其他實時框架都更瞭解它。Socket.IO處理開放式世界中的多玩家運動

我該如何儲存每個活動播放器的插槽,以便我可以根據每個播放器與電源線的距離來分類。 (例如,只更新移動的玩家位置給附近的玩家,而不是發送給服務器上的所有玩家)?

回答

0

這聽起來更像是一個數據結構問題。我想到的一個簡單的方法是將有:

- 這是空間中的遊戲
球員進行區域劃分 - 這代表一個獨立的播放
插座 - 手段與給定播放器進行通信

播放器應該有一個對Socket進行通信的引用。 player.SendMessage("hey there");

一個區域應該有球員

zonePlayers = new List<Player> Players(); 

列表如果消息要廣播通過整個區域簡單地遍歷球員名單併發送消息給每個玩家。

foreach (Player player in Players) { 
    player.SendMessage(msg); 
} 

找出如何發送消息給玩家。 找出如何從邏輯上將玩家分組在一起。

我剛剛讀到Socket.IO,他們已經有了房間。如果您爲每個區域定義一個房間,並且只有一個玩家爲該房間註冊,並在整個房間/離開該區域時離開該房間 - 您可以利用已經內置的功能來發送消息。

+0

感謝您的回覆!我最終創建了一種方法,通過所有玩家進行排序,抓取它們的X/Y/Z,並且只返回方法中參數指定的距離內的方法。然後我可以向所有這些球員發送更新。這是實際的嗎? –

+0

聽起來像是一個合理的開始。如果它成爲瓶頸,你將面臨一個需要處理的問題(玩家太多/世界太大) 如果每次發送消息發出聲音不必要。 – Beanish