Unity 作业系统和多维数组

Ima*_*ler 4 unity-game-engine

我有一个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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道还有其他不是 n^2 的算法可以做到这一点,但这只是实际问题的一个玩具示例。

小智 5

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

public NativeMultiHashMap<float, NativeArray<float>> FooBar 
             = new NativeMultiHashMap<float, NativeArray<float>>();
Run Code Online (Sandbox Code Playgroud)

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