Сервер GameManager отличается от клиента GameManager - PullRequest
0 голосов
/ 11 апреля 2020

поэтому я создаю игру в Unity, в которой сценарий GameManager привязан к объекту GameManager в моей игровой сцене. Я хочу использовать его, чтобы отслеживать игроков, подключенных к игре, в словаре. Кажется, это работает нормально, если я запускаю один экземпляр игры в качестве хоста и клиента, каждый игрок получает запись в словаре, и сервер может взаимодействовать с ними. Однако, если я запускаю экземпляр только для сервера, серверный словарь GameManager будет пуст, в то время как в словарях клиента все еще есть записи об игроках внутри. Я думал, что наличие экземпляра stati c обеспечит существование только одной копии GameManager. Любая помощь будет принята с благодарностью. Вот как я реализую GameManager:

 public class GameManager : MonoBehaviour
{
     public static GameManager instance;
     void Awake()
     {
         if (instance != null)
         {
             Debug.LogError("More than one GameManager in scene.");
         }
         else
         {
             instance = this;
         }
     }
     public static Dictionary<string, Player> players = new Dictionary<string, Player>();
     public static void RegisterPlayer(string ID, Player player)
     {
         players.Add(ID, player);
     }
     public static void UnRegisterPlayer(string ID)
     {
         players.Remove(ID);
     }
}

и вот призыв зарегистрировать игрока в одном из скриптов игрока:

 public override void OnStartClient()
 {
     base.OnStartClient();
     string ID = GetComponent<NetworkIdentity>().netId.ToString();
     Player player = GetComponent<Player>();
     GameManager.RegisterPlayer(ID, player);
 }
...