Unity Job System и многомерные массивы - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть 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, но это всего лишь игрушечный пример реальной проблемы.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

На основе Raph_Wa awnser я использовал

NativeHashMap<int, NativeList<Vector3>> distance;

Затем каждая работа получает список каждый

public void Execute(int i)
{
    NativeList<Vector3> a;
    distance.TryGet(i, out a);

    for (int j = 0; j < position.Length; j++)
        a[j] = Vector2.Distance(position[i], position[j]);

    distance.TryAdd(i, a);
}
0 голосов
/ 11 ноября 2018

Если я правильно понимаю вопрос, вам может помочь Unity NativeMultiHashMap.Вы можете попробовать что-то вроде:

public NativeMultiHashMap<float, NativeArray<float>> FooBar 
             = new NativeMultiHashMap<float, NativeArray<float>>();

В любой момент вы можете использовать ключ для добавления значения в качестве NativeArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...