- Home /
Are UnityEngine.Object types still not thread safe?
Hello all,
After reading a bunch of answers here, i happened upon one that said UnityEngine.Object types are not thread safe. Which makes it impossible to apply any kind of logic to Transform, Collider, Component, etc. on a thread that isn't the main thread -right? Is this still the case in Unity2019.2, or is it possible now? I ask because I've been struggling for two days, trying to get some asynchronous code to work.
Any help will be saintly at this point.
Thank you.
Answer by Glurth · Oct 11, 2019 at 05:30 PM
Honestly, NOT sure about the latest version. How it's normally been: if you want to DIRECTLY access objects from the unity engine (with a couple of exceptions (like Vector3 structs)), no you will not able to use threading for that. (as you know).
To use threading you will need to take the data you wish to manipulate from your unity scene, convert into your own data types. Then after processing the data in your thread, when it signals completion, the main thread can copy the data back into the scene objects. Not too big a deal for stuff like transforms, but get to be a pain, as you increase the kinds of objects you need to create "converters" for.
However, if you don't NEED it running in a separate thread, I'd strongly recommend using coroutines. These allow you to return control to the unity program, in a way similar to the threading "sleep()" function, using "yield return" and resume processing on the next line. Check out the comments under this answer for details: https://answers.unity.com/questions/1670533/coroutine-whilebool-kills-unity-coroutine-whileboo.html?childToView=1670755#comment-1670755 This is also a good way to test your "threading" logic, before having to deal with data-converters and any problems THEY might have.
Okay well that's a shame. Thank you for the help though.