首页 > 解决方案 > 错误:IsObjectMonoBehaviour 只能从主线程调用

问题描述

我正在尝试在 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 中做过的第一个项目,我在这里有点不知所措......

非常感谢您的意见!


主文件

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() {

        ...
    }
}

标签: c#unity3dposthttprequestienumerable

解决方案


推荐阅读