渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

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


f:id:esakun:20180911191336p:plain:w500

この辺りの記事の続きにあたりますが、絶賛JobSystemの使い方を探し中です。

今回はたくさんのキューブを、キューブそれぞれ固有のスピードで回してみます。JobSystemで遊んでみた〜的なライトな内容で、特に新しいサムシングは出てきません。

struct TestParallelForTransformTestJob : IJobParallelForTransform
{
    [ReadOnly]
    public NativeArray<UpdateData> 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のプロパティが詰まっているため、現在の回転値として取得しておきます。

f:id:esakun:20180911170327g:plain

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


今回のサンプルコード