質問: UnityEngine.Random.value; for(int i=0;i loadMethod); } ``` と書いても反応がない(エラーも吐かない)ので困っています ``` tex2d.SetPixel(i,j,judgeTypeColor(mapType[i,j])); ``` ↑この処理は重くない上に、おそらくUnityがSetPixelをメインスレッドで実行するように言ってくるので、heavyGenerationMethodとは分けて書きたいですのですが、可能でしょうか また、二重ループの中で進捗(n%生成完了)などの表示をする方法はありますでしょうか 初心者なので、見当違いなことを書いているかもしれませんが、ご教授いただけたらありがたいです。
回答: heavyGenerationMethod()の内容が分からないのですが、その中でUnityの機能を使っていない前提で書きます。 (なお、Unityの機能はメインスレッドでしか動作しないものがほとんどなので、使っている場合はほぼ不可能です) とりあえず、一つ一つ説明するのが面倒なので、ソースを記載しておきます。 コメントを併記しているので、理解してから使ってください。 また、動作未確認のため、エラーやバグがあったら自力で修正してください。 ``` //マップのサイズ int mapX=1000; int mapY=1000; //マップのデータを格納する int[,] mapType = new int[mapX,mapY]; //loadMethod()の進捗 float progress = 0f; //Startをコルーチンで実行 IEnumerator Start(){ //マップのシード値を設定 //(Unityの機能なので、メインスレッドであるここで実行) float seed = UnityEngine.Random.value; //子スレッドの開始 Task task = Task.Run(() => { loadMethod(seed); }); //子スレッドが終了するまで待機 while (!task.IsCompleted) { //1フレーム分待機 yield return null; } //色の取得 Color[] colors = new Color[mapX * mapY]; for(int i=0;i