void Update() { // show while in lobby and while not creating a character if (manager.state == NetworkState.Lobby && !uiCharacterCreation.IsVisible()) { panel.SetActive(true); // characters available message received already? if (manager.charactersAvailableMsg != null) { CharactersAvailableMsg.CharacterPreview[] characters = manager.charactersAvailableMsg.characters; // start button: calls AddPLayer which calls OnServerAddPlayer // -> button sends a request to the server // -> if we press button again while request hasn't finished // then we will get the error: // 'ClientScene::AddPlayer: playerControllerId of 0 already in use.' // which will happen sometimes at low-fps or high-latency // -> internally ClientScene.AddPlayer adds to localPlayers // immediately, so let's check that first startButton.gameObject.SetActive(manager.selection != -1); startButton.onClick.SetListener(() => { // add player CharacterSelectMsg message = new CharacterSelectMsg { index = manager.selection }; ClientScene.AddPlayer(manager.client.connection, message); // clear character selection previews manager.ClearPreviews(); // make sure we can't select twice and call AddPlayer twice panel.SetActive(false); }); // delete button deleteButton.gameObject.SetActive(manager.selection != -1); deleteButton.onClick.SetListener(() => { CharacterDeleteMsg message = new CharacterDeleteMsg { index = manager.selection }; manager.client.Send(CharacterDeleteMsg.MsgId, message); }); // create button createButton.interactable = characters.Length < manager.characterLimit; createButton.onClick.SetListener(() => { panel.SetActive(false); uiCharacterCreation.Show(); }); // quit button quitButton.onClick.SetListener(() => { NetworkManagerMMO.Quit(); }); } } else { panel.SetActive(false); } }