Unity中的主线程错误

本文关键字:线程 错误 Unity | 更新日期: 2023-09-27 18:29:51

我使用的是Unity 5.0。我正在尝试使用C#web客户端异步下载一些文件。文件被下载,DownloadDataCompleted事件也被触发。然后我试着做一些计算,但我得到了这些错误。

RandomRangeInt只能从主线程调用。构造函数和字段初始化器将在加载场景时从加载线程执行。不要在构造函数或字段初始化器中使用此函数,而是将初始化代码移到Awake或Start函数中。

以上问题的任何解决方案,或者有人能告诉我如何在主线程上运行该计算部分吗

按要求代码在这里

private void DownloadXMLFromServer()
{
    //first download the file from server
WebClient _maClient = new WebClient ();
        _maClient.DownloadDataCompleted += delegate(object sender, DownloadDataCompletedEventArgs e) 
        {
            File.WriteAllBytes("DownloadedXML.xml",e.Result);
                DownloadImgOfApp();
        };
        _maClient.DownloadDataAsync (new Uri (instance.urlOf_XML));
}
public void DownloadImgOfApp()
{
    int appNumber = UnityEngine.Random.Range (0, totalNumbOfAppsAvaialbeInXML);//these line throws error
    string appName = "App" + (appNumber + 1);
    string downloadImgLinkName = null;
    string clickableLink = null;   }

Unity中的主线程错误

Unity3D中的许多方法都可以仅从主线程调用。这意味着它们只能在Start() Update() Awake() OnTriggerEnter(...)等中调用。Unity不允许您从不同的线程调用这些方法(包括异步回调)。

这对GameObject.Instatiate(...)这样的东西来说是有道理的,但我想不出为什么随机会引起问题。但出于某种原因,Unity无论如何都会屏蔽电话。

为了解决您的问题,您可以创建System.Random的实例并用它生成随机数。
我能看到的唯一问题是System.Random不能给你一个浮点值,只有字节、int或double。