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; }
Unity3D中的许多方法都可以仅从主线程调用。这意味着它们只能在Start()
Update()
Awake()
OnTriggerEnter(...)
等中调用。Unity不允许您从不同的线程调用这些方法(包括异步回调)。
这对GameObject.Instatiate(...)
这样的东西来说是有道理的,但我想不出为什么随机会引起问题。但出于某种原因,Unity无论如何都会屏蔽电话。
为了解决您的问题,您可以创建System.Random
的实例并用它生成随机数。
我能看到的唯一问题是System.Random不能给你一个浮点值,只有字节、int或double。