こんにちは、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のプロパティが詰まっているため、現在の回転値として取得しておきます。
予めジョブ生成時に渡しているバッファ(上記サンプルのdataList)から、処理しようとしているキューブに加算する固有の回転値を取得して、それをTransformAccessの回転値に加算することで、それぞれのキューブを並列処理で回転させています。
今回のサンプルコード
ManyCubeRotateSample.cs · GitHub
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Unity2018.2.5.f1