/// <inheritdoc /> public override MultiReferentialInverseConstraintJob Create(Animator animator, ref T data, Component component) { var job = new MultiReferentialInverseConstraintJob(); var sources = data.sourceObjects; job.sources = new NativeArray<ReadWriteTransformHandle>(sources.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); job.offsetTx = new NativeArray<AffineTransform>(sources.Length - 1, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); var sourceBindTx = new AffineTransform[sources.Length]; for (int i = 0; i < sources.Length; ++i) { job.sources[i] = ReadWriteTransformHandle.Bind(animator, sources[i].transform); sourceBindTx[i] = new AffineTransform(sources[i].position, sources[i].rotation); } int offset = 0; var invDriverTx = sourceBindTx[0].Inverse(); for (int i = 1; i < sourceBindTx.Length; ++i) { job.offsetTx[offset] = invDriverTx * sourceBindTx[i]; offset++; } return job; }
/// <inheritdoc /> public override void Destroy(MultiReferentialInverseConstraintJob job) { job.sources.Dispose(); job.offsetTx.Dispose(); }