- Home /
Coroutines, Threads and Level Generation?
So I've been creating a level generation algorithm which takes longer and longer the more I build upon it. The natural solution seems to be to separate it from the main thread somehow so that players does not have to wait for it to complete. This method relies a lot on for example taking transforms of objects and measuring distances for calculations.
This creates two problems:
1) If I run the algorithm in a coroutine everything freezes anyway.
2) If I run the algorithm in another thread, I cannot access transforms or Find() etc.
But there must exist some solution for this problem right? What am I doing wrong?
Answer by StupidlySimple · Aug 06, 2016 at 11:51 PM
1) Shouldn't freeze unless you have infinite loop somewhere in your code. That will definitely freeze up the main thread. Post your code here so we can pick it apart =P
2) Unity API aren't threading safe, but there are ways to get around this if you think a bit more on it ;). I played around with Multi-Threading to generate things outside the camera view for seamless transition from one place to another.
Answer by visualbruno · Aug 07, 2016 at 01:22 PM
From my experience, if your coroutine is very long or is doing a lot of things, your application will freeze, so just add inside your coroutine at different places a "yield return new WaitForEndOfFrame();", it will allow the main thread to render and your application will not be blocked.
If you use Threads, you cannot access graphic components, so if you need it, use the script "UnityMainThreadDispatcher", but take care with it, because it is just queueing the actions, so you can have some problems of synchronization.
https://github.com/PimDeWitte/UnityMainThreadDispatcher
Good luck
Your answer
Follow this Question
Related Questions
Callback from a coroutine 1 Answer
Dynamic content delivery on Unity iOS 0 Answers
Thread ending prematurely? 2 Answers
Confused about using Update vs. Coroutines 2 Answers
Couroutines and Threading for Procedural Generation 1 Answer