I am trying to run a job after converting a Vector3[] to a NativeArray<float3> but i keep getting an error:
InvalidOperationException: The UNKNOWN_OBJECT_TYPE TranslateJob._data has not been assigned or constructed. All containers must be valid when scheduling a job.
The error does not make sense to me.
This is my code setup:
//translate every vertex by the given translation
public static void Translate(Vector3[] vertices, in float3 translate)
{
unsafe
{
//get pointer of vertices
fixed (Vector3* ptr = vertices)
{
//convert pointer to native array
var arr = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray<float3>(ptr, vertices.Length, Allocator.Temp);
//create job
var job = new TranslateJob(arr, translate);
var handle = job.Schedule(arr.Length, 64);
handle.Complete();
//copy data back to vertices
UnsafeUtility.MemCpy(ptr, arr.GetUnsafeReadOnlyPtr(), vertices.Length * sizeof(Vector3));
//dispose native array
arr.Dispose();
}
}
}
My job looks like this:
struct TranslateJob : IJobParallelFor
{
NativeArray<float3> _data;
readonly float3 _translation;
public TranslateJob(in NativeArray<float3> data, in float3 translate)
{
_data = data;
_translation = translate;
}
public void Execute(int index) => _data[index] += _translation;
}