Linked Questions

Popular Questions

Thread safety in Unity

Asked by At

In Unity, the thread cannot operate the object provided by UnityEngine like transform.position etc, which caused an exception that get_transform can only be called from the main thread. However, these methods can be used in some async function like BeginReceive, so is there anyone can tell me why? The async function is not thread or sth else?

I try the code below:

void Start(){
    AsyncCallback callback = new AsyncCallback (demo);
    callback.BeginInvoke (null, null, null);
}

void demo(IAsyncResult result){
    Debug.Log(Thread.CurrentThread.ManagedThreadId);
    Debug.Log(gb.transform.position.ToString());
}

It does throw an exception when I run the code on Unity Editor. However, when I run this code on an Android phone directly, it didn't throw any exception and the code was performed correctly.

The log in applogcat shows that:

Line 13497: 02-20 14:37:49.973 31027 31697 I Unity   : 3
Line 13501: 02-20 14:37:49.975 31027 31697 I Unity   : (0.0, 0.0, 0.0)

So it seems that the function runs on another thread instead of main thread, so could anyone tell me why transform works on this situation?

Related Questions