поэтому я создаю игру в 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);
}