Unity Collections パッケージ
このパッケージは、ジョブや Burst でコンパイルしたコードで使用できるアンマネージのデータ構造を提供します。
このパッケージで利用できるコレクションは、以下の 3 つのカテゴリに分けられます。
Unity.Collections
のコレクション型のうち、名前の先頭がNative-
のものには、それらが適切に破棄され、スレッドセーフな形で使用されるようにするための安全性チェックが備わっています。Unity.Collections.LowLevel.Unsafe
のコレクション型のうち、名前の先頭がUnsafe-
のものには、そうした安全性チェックが備わっていません。- その他のコレクション型は割り当てられておらず、ポインターが含まれていないため、破棄やスレッドセーフが問題になることは実質的にありません。これらの型が使用されるのは、ごく一部のデータのみです。
Native-
型の場合は、メソッドに渡されるインデックスが確実に範囲内に含まれるようにするための安全性チェックが実行されますが、その他の型では、ほとんどの場合そうしたチェックは実行されません。
いくつかの Native-
型には Unsafe-
のバージョンがあり、例えば NativeList
には UnsafeList
、NativeHashMap
には UnsafeHashMap
があります。
一般的には Unsafe-
バージョンではなく Native-
コレクションを使用した方がよいですが、Native-
コレクションは、他の Native-
コレクションを含むことはできません (安全性チェックが実装されているため)。そのため、例えばリストをまとめたリストが必要な場合は、NativeList<UnsafeList<T>>
または UnsafeList<UnsafeList<T>>
を使用することはできますが、NativeList<NativeList<T>>
は使用できません。
安全性チェックを無効にした場合、通常は、Native-
型とその Unsafe-
バージョンにはパフォーマンスの大きな違いはありません。実際、ほとんどの Native-
コレクションは、Unsafe-
バージョンのラッパーとして実装されます。例えば NativeList
には、UnsafeList
と、安全性チェックで使用されるいくつかのハンドルが含まれます。
個々のコレクション型の詳細については、コレクション型 に関するドキュメントを参照してください。