Unity3D開發之多執行緒計算

2021-09-23 22:25:20 字數 1042 閱讀 3194

前幾天做的熱力圖中,

foreach (var pos in positionlist)

void posarrayadd(float[,] posarray, position pos,int size)}}

}

這裡的計算量比較大,我們在放大100倍的情況下,假如有一千個資料,要計算一千萬次。領導懷疑我的這個演算法在大量資料的情況下會不會宕機。測試中發現在1800個資料即1800萬次計算(4個迴圈,每個迴圈裡有600個資料)的時候就會有些卡,在12000萬次計算的時候基本要等待4-5秒。很慢很慢。於是我想是否可以通過多執行緒優化這裡。是的,可以!

我們將此計算方法放到自己封裝的執行緒類中計算,這樣就不會影響主線程的運算。下面是我封裝的執行緒類:

namespace unite

public float[,] start()

public void cal()

debug.log("執行緒結束");

isover = true;

thread.abort();

}void posarrayadd(float[,] posarray, peopleposition.position pos, peopleposition.int size)}}

}}

}

從**中我們可以看到我們在自己定義的類中宣告了標誌執行緒是否結束的字段isover。我們在協程中就可以如下呼叫:

threadmanager threadmanager = new threadmanager(positionlist, scale, posarray, size);

threadmanager.start();

while (!threadmanager.isover)

debug.log("運算結束");

//todo

運算速度超快。在計算4個6000個資料,即四個執行緒同時計算6000個資料要2.4s,對於主線程的ui顯示也沒有造成卡頓影響。而主線程算4個600個資料基本要在1.33s左右。

Unity3d多執行緒

一 多執行緒的建立 thread t new thread new threadstart go thread t1 new thread go 兩種建立方式沒有區別 二 多執行緒的狀態控制和優先順序 多執行緒有4種狀態 start 開始 abort 終止 join 阻塞 sleep 休眠 有5種優...

Unity3d多執行緒

一 多執行緒的建立 thread t new thread new threadstart go thread t1 new thread go 兩種建立方式沒有區別 二 多執行緒的狀態控制和優先順序 多執行緒有4種狀態 start 開始 abort 終止 join 阻塞 sleep 休眠 有5種優...

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...