Coroutine in Awake function on Network project doesn't work
Hello, I'm on a project of coop game and use the built-in Unity networking tools. The level is a big box with 4 corridors. I want my corridors to be synchronised between the 2 players of the game using an animator and network animator.
Now here's the problem : when I load the scene (from Menu to Level1 for example), Corridors (which have a network identity) have to be spawned by the server. I spent time yesterday debugging the fact that if you do initializations and modifications on the object in the Awake function, it bugs the spawning procedure, no Error message appears but it stop spawning objects. (All objects including the player, not just the corridor)
So I tried to put my Awake code in a Coroutine to wait for the scene to be marked as Ready before doing things, as the following :
void Awake()
{
Debug.Log(gameObject.name + " Awake : " + Time.time);
StartCoroutine(Initialiaze());
}
private IEnumerator Initialiaze()
{
Debug.Log(gameObject.name + "Scene " + ClientScene.ready + " begin coroutine " + Time.time);
while (!ClientScene.ready)
{
Debug.Log(gameObject.name + "Not ready, waiting " + Time.time);
yield return null;
}
Debug.Log(gameObject.name + "Ready, doing things " + Time.time);
entryDoorAnimator.SetBool("open", false);
exitDoorAnimator.SetBool("open", false);
if (isLocked)
{
GetComponent<BoxCollider>().enabled = false;
Destroy(GetComponent<NetworkAnimator>());
enabled = false;
}
else
{
if (isEntry)
GetComponent<NetworkAnimator>().animator = exitDoorAnimator;
else
GetComponent<NetworkAnimator>().animator = entryDoorAnimator;
GetComponent<NetworkAnimator>().SetParameterAutoSend(0, true);
playersInside = new List<PlayerMovementController>();
}
Debug.Log(gameObject.name + "Finished init " + Time.time);
}
(I put the whole code, in case you can see something than could make this wrong) But now, the coroutine do the first iteration, return, the NetworkManager keep doing his stuff (spawning objects, instantiating things, etc) but the coroutine is never resumed.
Is there any reason for this? Is this a bug or did'nt I undestand something? Please tell me and thanks per advance.
Edit : My Corridor script was set before the default time in the Script Execution Order menu. I tried putting it after the default time but it didn't solve the problem.
Your answer
Follow this Question
Related Questions
Multiplyaer FPS sprint speed does not work 1 Answer
Any way to spawn 2 different Game Objects when doing multiplayer? 1 Answer
How can have more than 8 players connected to my server 0 Answers
UNET (Ummorpg) HUGE Lag 0 Answers
Unity multiplayer 1 Answer