Profiler で犯人を特定し、GC対策 も Update Manager もやった。それでもグラフの山が消えない——犯人が「全敵からプレイヤーへの距離計算」のような、 数千〜数万件の数値計算そのもの だった場合、呼び出し回数を整理する系の最適化は効きません。計算の総量が多いのだから、誰かがその計算をしなければならない。
ならば、 メインスレッド1人でやるのをやめましょう。今のCPUには複数のコアがあり、Unityには計算をワーカースレッドへ配る公式の仕組み—— Job System と、配った計算を高速なネイティブコードに変換する Burstコンパイラ ——があります。この記事は、ECSへ飛ぶ前の現実的な入口として、1万体の距離計算を題材にJobs+Burstへ入門します。
この記事でわかること
- Jobは万能高速化ではなく 「独立した大量計算」専用の道具 であること(向き・不向きの判断)
- Jobとデータをやり取りする NativeArray と、Disposeの責任
IJobParallelFor+Burst の最小実装と、Schedule→別作業→Completeの正しい順序- Job内から
transformなどのGameObject系APIに触れない理由と、その回避策- そして 「今は使わなくてよい」 と判断する 引き際
動作確認環境: Unity 6 (6000.x)(Burst・Collectionsパッケージ使用。Package Managerで確認できます)
Jobが向く仕事、向かない仕事
最初にはっきりさせておきます。Jobは「付ければ何でも速くなる魔法」ではありません。仕事をワーカーへ配る往復にはコストがかかるので、 配る価値のある仕事 にしか効きません。
