get_gameObject can only be called from the main thread.
我得到的错误是否与我在C#中实现事件处理程序的方式有关。
在我的Start方法中,我有
EventManager.Instance.AddListener(EVENT_TYPE.UPDATE, this);
然后在我的OnEvent处理程序方法中我有
public void OnEvent(EVENT_TYPE Event_Type, Component Sender, object Param=null)
{
//Detect event type
switch (Event_Type)
{
case EVENT_TYPE.UPDATE:
Debug.Log(" UPDATE Timer event received Param = "+ Param);
foo(Param as string);
break;
}
}
然后是我的foo方法
private void foo(string param)
{
Debug.Log("ASSERT foo gameObject" + gameObject);
所以gameObject
为空,因为foo
方法不在主线程上。那么我如何访问gameObject
呢?
答案 0 :(得分:0)
与每个Windows应用程序一样,在Unity3D
中,您必须仅从Thread
访问元素(通常是主线程或UI线程),并且错误消息明确指出这是你的情况。
所以你可以通过两种方式解决这个问题:
Loom.QueueOnMainThread(() =>
{
Debug.Log("ASSERT foo gameObject" + gameObject);
});
或
Loom.DispatchToMainThread(() =>
{
Debug.Log("ASSERT foo gameObject" + gameObject);
});
但在这种情况下,您必须initialize the Loom
object,例如,在Start
方法中添加一些无用的代码:
void Start()
{
var tmp = Loom.Current;
// or
Loom.Current.GetComponent<Loom>(); // irrelevant call to kickoff Loom.
}
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Normal,
() => { // your work here });