У меня есть IJobParallelFor
, где каждое задание создает массив данных
Я пытался использовать NativeArray<float[]>
, но это не работает, потому что это ссылочный тип, и я пытался NativeArray<NativeArray<float>>
, ноэто не работает, потому что
... Тем не менее, тип, который содержит переменный массив типов blittable, сам по себе не является blittable.
Источник: Типы MSDN blittable
Есть ли способ обойти это без использования гигантского одномерного массива и расчета индекса вручную?Это нехорошо, так как вы должны использовать [NativeDisableParallelForRestriction]
для доступа к массиву вне каждого диапазона заданий.
Моя работа:
public struct DistanceJob : IJobParallelFor
{
[NativeDisableParallelForRestriction] public NativeArray<float> distance;
[ReadOnly] public NativeArray<Vector2> position;
public void Execute(int i)
{
for (int j = 0; j < position.Length; j++)
distance[i * position.Length + j] = Vector2.Distance(position[i], position[j]);
}
}
Я знаю, что есть другие алгоритмы, которые не n ^2, но это всего лишь игрушечный пример реальной проблемы.