docs.unity3d.com
    目次を表示する/隠す

    既知の問題

    同一のスレッドで Allocator.Temp を使用して割り当てられたコンテナは、別々ではなく、すべて共有の AtomicSafetyHandle インスタンスを使用します。これは、Temp によって割り当てられたコレクションはジョブに渡すことができないため、意義のある処理です。しかし、NativeHashMap、NativeMultiHashMap、NativeHashSet、NativeList のすべてを、それらの補助的な安全性ハンドルが使用される状況で利用すると、問題が生じます (補助的な安全性ハンドルは、サイズ変更によって NativeList の再割り当てが行われたときに、NativeList のエイリアスとなる NativeArray が確実に無効化されるようにします。)。

    これらのコレクション型の Enumerator (列挙子) を無効化する (または NativeList.AsArray によって返される NativeArray を無効化する) 処理も、それまでに取得した他の Enumerator をすべて無効化します。例えば、安全性チェックが有効になっていると、以下のような場合に例外がスローされます。

    var list = new NativeList<int>(Allocator.Temp);
    list.Add(1);
    
    // この配列ではリストの補助的な安全性ハンドルを使用しており、それが
    // すべての Allocator.Temp のアロケーション間で共有されます。
    var array = list.AsArray();
    
    var list2 = new NativeHashSet<int>(Allocator.Temp);
    
    // これにより、上記のリストでも使用されている補助的な安全性ハンドルが
    // 無効化されます。
    list2.TryAdd(1);
    
    // これにより、共有の安全性ハンドルが無効化されるため、InvalidOperationException が
    // スローされます。
    var x = array[0];
    

    この問題は今後のリリースで対応予定です。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)