渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

IJobParallelForTransformでキューブを回転させる

IJobParallelForTransformでキューブを回転させる

こんにちは、Unityエンジニアのオオバです。

絶賛JobSystemの使い方を探し中です。

今回はたくさんのキューブを、キューブそれぞれ固有のスピードで回してみます。
JobSystemで遊んでみた〜的なライトな内容になっております。

struct TestParallelForTransformTestJob : IJobParallelForTransform  
{
    [ReadOnly]  
    public NativeArray datList;  
    [ReadOnly]  
    public float deltaTime;  
    public void Execute(int index, TransformAccess transform)  
    {
        // 現在のTransformの回転値を取得  
        var currentRotation = transform.localRotation;  
        var data = datList[index];  
        // 現在のQuaternionに固有の回転値を加算  
        transform.localRotation = currentRotation * Quaternion.Euler(data.rotateSpeed * deltaTime);  
    }
}

ジョブ的にはこんな感じの作りになっています。
Executeで渡ってくるTransformAccessには現在のTransformのプロパティが詰まっているため、現在の回転値として取得しておきます。

IJobParallelForTransformでキューブを回転させる_0

予めジョブ生成時に渡しているバッファ(上記サンプルのdataList)から、処理しようとしているキューブに加算する固有の回転値を取得して、それをTransformAccessの回転値に加算することで、それぞれのキューブを並列処理で回転させています。

今回のサンプルコード

ManyCubeRotateSample.cs · GitHub

オススメ記事
検証環境
  • Unity2018.2.5.f1