How should I verify that all of my client Object are created and ready after loading a new scene?
Unity newbie here.
I am playing with a networked card game. After setting up my game board I switch scenes and start a "GameManager" on the server. On Start, the GameManager shuffles and deals all my card decks. However, it seems that my networked Clients have not finished setting up their objects so my "OnChanged" handlers end up throwing NullReferenceExceptions.
[Server]
void StartingCards()
{
foreach (var player in LobbyManager.SSingleton.Players)
{
foreach (var deck in Decks)
{
var ui = deck.GetComponent<DeckUI>();
ui.DrawNextCard();
player.ViewedCards.Insert(0, ui.CurrentLine);
}
}
}
-------------------------------------------------------------------------------------
[Client]
public SyncListString ViewedCards = new SyncListString();
public override void OnStartLocalPlayer()
{
base.OnStartLocalPlayer();
ViewedCards.Callback = OnViewedChanged;
}
void OnViewedChanged(SyncListString.Operation op, Int32 itemIndex)
{
switch (op)
{
case SyncListString.Operation.OP_ADD:
case SyncListString.Operation.OP_INSERT:
var card = Instantiate(ContactCardPrefab, _discardViewer); //At best this simply does not work since _discardViewer has not been built yet on the client. Similar scenarios will throw a Null exception
var script = card.GetComponent<CardUI>();
script.SetCurrentCard(item);
break;
}
}
I have tried using the ClientScene.Ready / NetworkServer.PlayerIsReady pattern but:
The documentation does not match the current class implementation (2017.1.1.p4)
"Ready" only seems to indicate the connection is ready, not that all the gameObjects are constructed and ready.
So, my question is, what is the best/correct way to make sure all the players scenes are built and ready to start accepting Remote Proceedure Calls and SyncVar changes from the server? Right now, my best attempt has been to provide a command for the Players to call when they are ready. Then, my Server simply waits for all the Players to be ready. But, this seems heavy to me and I feel like the networking architecture should provide a smooth way to do this.
Your answer
Follow this Question
Related Questions
NetworkServer.Send and NetworkClient.Send or synchronising on player prefab? 0 Answers
Networking functions work fine on player object, but not other objects 0 Answers
Looking for tips on identifying reason behind random client disconnects 0 Answers
Using Client.SendBytes to stream between apps 1 Answer
non-player object can't execute's "[Command]"'s attributes 0 Answers