错误:只能从主线程调用IsObjectMonoBehaviour

时间:2018-11-06 00:54:48

标签: c# unity3d post httprequest ienumerable

我正在尝试在Unity中引用另一个脚本。这些脚本之一(API.cs)向服务器发送Post请求,而另一个脚本(Main.cs)试图运行其Post()方法。

但是,我在Unity调试器中看到以下错误消息:

  

只能从主线程调用IsObjectMonoBehaviour。

     

构造器和字段初始化器将在加载场景时从加载线程执行。

     

请勿在构造函数或字段初始化程序中使用此函数,而应将初始化代码移至Awake或Start函数。

     

UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)

     

API:Post(MonoBehaviour)(位于Assets / Scripts / API.cs:7)

     

Main:m__0()(位于Assets / Scripts / Main.cs:13)

     

System.Threading._ThreadPoolWaitCallback:PerformWaitCallback()

我认为此错误与从StartCoroutine()方法中调用非静态方法PostRequest()有关。但是,我无法将IEnumerator设为“公共静态”。

这是我在C#和Unity中都从事过的第一个项目,在这里我有点茫然...

非常感谢您的投入!


Main.cs

using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;

public class Main : MonoBehaviour {

    void Start() {

        Task one = Task.Run(() => {

            API api = new API();
            api.Post(this);
        });

        one.Wait(-1);
    }
}

API.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class API {

    public void Post(MonoBehaviour instance) {

        instance.StartCoroutine(PostRequest());
    }

    IEnumerator PostRequest() {

        ...
    }
}

0 个答案:

没有答案