我有一个 IJobParallelFor,其中每个作业创建一个数据数组

我试过使用 NativeArray<float[]> 但这不起作用,因为它是一个引用类型,我试过 NativeArray<NativeArray<float>> 但那不起作用,因为



有没有办法在不使用巨大的一维数组并手动计算索引的情况下解决这个问题?这并不好,因为您必须使用 [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 的算法可以做到这一点,但这只是实际问题的一个玩具示例。

最佳答案

如果我正确理解了这个问题,Unity NativeMultiHashMap 可以帮助你。您可以尝试以下操作:

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

您现在可以随时使用该键将值添加为 NativeArray。

关于unity3d - Unity 作业系统和多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52460051/

10-10 18:58