![見出し画像](https://assets.st-note.com/production/uploads/images/74406543/rectangle_large_type_2_9afe00ebca498bc09971070585ccbd77.png?width=800)
Unity DOTS Entities 0.50 の変更関連
本日、ついに「Entities 0.50」がリリースされました。このページでは関連の変更をまとめています。
Entities の変更点まとめ
Entities 0.50.0
追加
Window > DOTS > Entities ウィンドウの追加: ワールド内のすべてのエンティティをリアルタイムで表示し、検索、選択、インスペクタによる検査が可能です。
Window > DOTS > Components ウィンドウの追加:すべてのComponentタイプを表示し、Inspectorで検索、選択、検査が可能です。
Window > DOTS > Systems ウィンドウの追加:ワールド内で動作するすべてのSystemをSystem Groupごとに表示し、Inspectorで検索、選択、検査が可能です。
Window > Analysis > Profiler モジュールの追加:プロファイラーモジュールを2つ導入しました。Entities Structural Changes プロファイラーモジュールは、どのワールド/システムが構造変化を発生させたか、そしてフレームごとにどれだけの時間がかかったかを記録することができます。Entities Memory プロファイラ モジュールは、どのワールド/システムがメモリ チャンクを割り当てたか、アーキタイプごとの詳細とともに記録します。
ArchetypeChunk.GetComponentDataPtrRO() と
ArchetypeChunk.GetComponentDataPtrRW() はArchetypeChunk.GetNativeArray() に代わる、チャンクのコンポーネントデータへの安全ではない生アクセスを提供するようになりました。ComponentTypeHandle.Update() により、ComponentTypeHandle をシステム作成時に一旦作成し、使用前にフレームごとにインクリメンタルに更新できるようになりました。
TypeManagerがまだ初期化されていない場合、知らないコンポーネントタイプが要求されたことを報告するだけでなく、より明確なメッセージを追加しました。
Entity Windowで無効になったエンティティは、ヒエラルキーで無効になったgameobjectと同じスタイルになりました。
選択したシステムを反映するためにインスペクタの内容を更新するGo-toボタンと、システムウィンドウが開いている場合にそのシステムをハイライト表示するボタンを追加。
BlobBuilderで配列を割り当てる際に、アライメントを指定することが可能になりました。
Burst 1.5.2へのアップグレード
選択したコンポーネントを反映するためにインスペクタの内容を更新し、コンポーネントウィンドウが開いている場合はそのコンポーネントをハイライトするための移動ボタンを追加しました。
ワールドにアンマネージドシステムを作成するルーチンを一般に公開。
シーンに他のシーンやプレハブへの弱いアセット参照を含めることができるようになりました。参照されているすべてのシーンとプレハブは、プレイヤーのビルドに自動的に含まれます。
シーンに他のシーンやプレハブへの弱いアセット参照を含めることができるようになりました。参照されているすべてのシーンとプレハブは、プレイヤーのビルドに自動的に含まれます。EntitiesSamples/Assets/Advanced/WeakAssetReferences" にあるサンプルは、シーンやプレハブへの弱いアセット参照を使用する方法を示しています。インクリメンタル コンバージョンでは、GameObject 名を追跡して、Entity が変更されたときに名前を変更するようになりました。
新しいメソッド CanBeginExclusiveEntityTransaction を EntityManager に追加して、新しい排他的エンティティ トランザクションを作成できるかどうかをチェックできるようになりました。CollectionHelperに、カスタムアロケータからNativeArrayを生成/割り当てするためのラッパー関数が追加された。
Entities.ForEach() は、パラメータなしのラムダを受け付けるようになりました。
WithSharedComponentFilter は、2 つの共有コンポーネント・パラメータでも動作するようになりました。
EntityCommandBuffer に IsEmpty プロパティが追加され、少なくとも 1 つのコマンドが正常に記録された場合に true が返されるようになりました。
ComponentDataFromEntityにTryGetComponentを追加
BufferFromEntityにTryGetBufferを追加
Entities journaling:ECSの過去のイベントを記録し、静的クラスのEntitiesJournalingプロパティから検査できます。
新しいデバッグプロキシにより、IDE 内で EntityCommandBuffer を簡単に表示できるようになりました。
EntityCommandBufferDebugView 内で、各コマンドには、コマンドを展開する前に実行されたアクションの概要が表示されるようになりました。
SystemRef.Update により、管理されていないシステムを手動で更新できるようになりました。
Entities.ForEach で WithScheduleGranularity をサポートし、エンティティごとのスケジューリングを可能にしました。
EntityCommandBuffer.Instantiate() は、1 つのコマンドで複数の Entity をインスタンス化し、結果のエンティティを NativeArray<Entity> に書き込むことができるようになりました。
ISystemBase システムの Entities.ForEach.Run を完全にBurst対応させることができるようになりました。
RateUtils.VariableRateManager で更新レートを容易にした
DefaultWorld.BeginVariableRateSimulationEntityCommandBufferSystem追加
DefaultWorld.VariableRateSimulationSystemGroup追加
DefaultWorld.EndVariableRateSimulationEntityCommandBufferSystem追加
enum WorldFlags に EnableBlockFree という要素が追加され、World.UpdateAllocator が個々のメモリ ブロックを解放することが可能かどうかを示すようになりました。
ComponentTypes に、FixedList128Bytes<ComponentType> を受け取る新しいコンストラクタのバリエーションが追加され、Burst コンパイルされたコードで使用するのに適しています。
EntityCommandBuffer には、NativeArray<Entity> をターゲットとする新しいバージョンがいくつかあり、多くの場合、個々のエンティティに対して個々のコマンドを記録するよりも効率的です。
現在のアーキタイプのメモリ使用量を表示できる新しい Archetypes ウィンドウが追加されました。
IJob* 型は SharedStatic を使用するため、最終的にはバーストコンパイルされる可能性があります。
DOTS_ADD_PARTIAL_KEYWORD スクリプト定義が設定されている場合、生成中に欠落しているパーシャルを追加する機能を追加。
変更
IJobEntityBatch.RunWithoutJobs() と IJobEntityBatchWithIndex.RunWithoutJobs() でクエリフィルタリングを無効にする高速パスを追加し、パフォーマンスのオーバーヘッドを最大30%低減しました。
com.unity.dots.editor パッケージを com.unity.entities パッケージにマージし、スタンドアロンパッケージとしての DOTS Editor を事実上非推奨としました。DOTS Editor パッケージのすべての機能は、Entities パッケージを参照するときに含まれるようになりました。
DOTS Runtime は、codegen にソースジェネレータを使用するようになりました。
EntityPatcher のバーストコンパイルに備え、EntityPatcher の一部をバーストコンパイル対応にし、その性能向上を図りました。
EntityPatcher のバーストコンパイルに備え、EntityPatcher の一部をバーストコンパイル対応にし、その性能向上を図りました。
Entity.Equals(object compare) が NullReferenceException をスローするのではなく、比較オブジェクトが NULL の場合に false を返すようになりました。
DynamicBuffer を常にblittableな型にし、(安全性チェックがオンのエディタでも) Burst 関数ポインタに参照渡しできるようにしました。
BlobAssetStore.ComputeKeyAndTypeHashのハッシュ計算で衝突の可能性を低減。
エンティティ変換プレビューで、プレビュー可能なGameObjectの最大数を100個に制限しました。
エンティティ変換プレビューで表示される追加エンティティの最大数を 250 に制限しました。
エンティティ変換プレビューの全体的なパフォーマンスを改善しました。
Entities.ForEach と Generated Authoring Component のコード生成のデフォルト モードとして、ソース ジェネレータが使用されるようになりました。これらは、必要に応じて SYSTEM_SOURCEGEN_DISABLED および AUTHORINGCOMPONENT_SOURCEGEN_DISABLED スクリプト定義で無効にすることができます。最も大きな変更点は、生成されたコードを検査およびデバッグできるようになったことです (バーストされていない場合)。生成されたコードは Temp/GeneratedCode に保存され、Visual Studio と Rider の両方でステップインすることができます。
プロファイリング可能なビルドを作成するために必要な前提条件をビルド構成で強調するためのドキュメントを用意しました。
Entities ウィンドウに、GameObject 階層と同様のスタイルでプレハブエンティティが表示されるようになりました。
Entities インスペクタのrelationshipsタブのシステムが、作成順ではなくスケジュール順でソートされるようになりました。
サブシーンヘッダが非同期にロードされるようになり、ロード中にメインスレッドをストールすることがなくなりました。
LiveTweaking のパフォーマンスが改善されました。
EntityDiffer は、エンティティの名前だけが変更されたときにエンティティの変更をキャプチャします。
IDEデバッガでは、ComponentSystemGroupは、より関連性の高い情報を表示します。クラスの正確な構成が必要な場合は、raw viweを使用できます。
ComponentSystemGroup.RemoveSystemFromUpdateList と ComponentSystemGroup.RemoveUnmanagedSystemFromUpdateList は、 ComponentSystemGroup.EnableSystemSorting が false に設定されているときに使用できるようになりました。
ある EntityCommandBuffer によって作成された「プレースホルダ」エンティティが、別の EntityCommandBuffer に渡されることを検出するためのデバッグ チェックが追加されました。
GetEntityQuery() によって作成された EntityQuery に対して .Dispose() を呼び出したときのエラー メッセージが明確になりました。これは常にエラーです。これらのクエリは関連付けられたシステムに属しており、決して手動で破棄するべきではありません。これらのクエリは関連付けられたシステムに属しており、決して手動で破棄してはいけません。これらはシステム自体と共にクリーンアップされます。
IDE デバッガ内では、ArchetypeChunk はより関連性の高い情報を表示します。構造体の正確な構成が必要な場合は、raw viewを使用できます。
IDE デバッガでは、EntityArchetype はより関連性の高い情報を表示します。構造体の正確な構成が必要な場合は、raw viewを使用できます。
IJobEntityBatch batchIndex パラメータは、batchId に名前が変更されました。このパラメータから期待される値に関するドキュメントは、それに応じて更新されました。
IDEデバッガ内で、EntityManagerはより関連した情報を提示します。構造体の正確な構成が必要な場合は、raw viewを使用できます。
IDE デバッガー内で、ArchetypeChunk の OrderVersion と ChangeVersions per ComponentType が見やすくなりました。
IDE デバッガー内で、SystemState がより関連性の高い情報を表示するようになりました。構造体の正確な構成が必要な場合は、raw viewを使用できます。
IDE デバッガー内で、World がより関連性の高い情報を表示するようになりました。構造体の正確な構成が必要な人は、raw viewを利用できます。
EntityCommandBufferSystem.CreateCommandBuffer() が Allocator.TempJob の代わりに World.UpdateAllocator を使用してコマンド バッファを割り当てるようになりました。このアロケータからのアロケーションは、ディスプレイのフレームレートに縛られるのではなく、2 つの完全な World Update サイクルという固定されたライフタイムを持つようになりました。
EntityCommandBuffer.AddComponentForEntityQuery<T>() は、提供された T 値が同じコマンド バッファで以前に作成された一時的な Entity への参照を含んでいるかどうかをアサートするようになりました; これらの Entity は再生中に正しい最終 Entity とまだ正しくパッチされていません。このパッチは、将来の変更で実装される予定です。ComponentSystemBaseManagedComponentExtensions.HasSingleton{T} を削除 - ComponentSystemBase.HasSingleton{T} はすでに管理されたコンポーネントを処理します。
ISystemBaseをISystemへ変更
クエリウィンドウのデザインを変更しました。
FixedRateUtils は RateUtils に名称変更されました。
IFixedRateManager は IRateManager に名称変更されました。
EntitiesJournaling 機能のレコードに OriginSystem が追加され、どのシステムが変更を要求したかが入力されるようになりました。この情報は、延期されたEntityCommandBufferがどこから記録されたかを判断するのに便利です。
GameObject変換時にSubSceneセクションエンティティが制約の1つを満たしていない場合の診断が改善されました。
非推奨
将来のリリースでは、IJobEntityBatch.RunWithoutJobsInternal() と IJobEntityBatchWithIndex.RunWithoutJobsInternal() はパブリック API から削除されます; 名前が示すように、それらは内部使用のみです。ユーザー・コードでは、これらの関数の非Internal()バリアントを使用する必要があります。
EntityDataAccess のいくつかのパブリック関数が非推奨になりました。新しい関数は、次の規約に従っています。DuringStructuralChange(...)
Entity Debugger は非推奨としてマークされ、将来のリリースで削除される予定です。新しいウィンドウは、[Window] > [DOTS]を参照してください。
削除
Playback時に処理されていたEntityQueriesのEntityCommandBufferの関数を非推奨としました。
Entity メッシュ レンダラーとの一貫性を保つために、Closed SubScene での GI Light ベーキングを当面停止しました。
Unity.Entities.RegisterGenericJobTypeAttribute は、 Unity.Jobs.RegisterGenericJobTypeAttribute として Unity.Jobs に移動されました。
StreamBinaryReader と StreamBinaryWriter は内部で使用されるようになりました。
JobComponentSystemを削除しました。これは SystemBase に置き換えられ、より良くテストされ、サポートされています。Entities 0.5 アップグレードガイドに、JobComponentSystem から SystemBase へのアップグレード方法が説明されています。
IJobBurstSchedulable
Job reflection data ILPP
修正済み
conversion Worldの名前を生成する際の細かいタイプミスを修正
[DisableAutoCreation]は、ドキュメント通り、サブクラスには継承されなくなりました。
Entity インスペクタの応答性を改善しました。
Burst 1.5.0 で、一部のエンティティコードが [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] ガード関数内にない throw 文を含んでいたために発生していたプレイヤー構築時の警告を修正しました。
システム安全性チェックのパフォーマンスが大幅に改善
Systemsウィンドウ、Entityウィンドウ、Componentウィンドウはすべて同じ最小サイズを使用します。
Systemsウィンドウの最小サイズに関するスタイルの問題を修正
無効化されたgameobjectの子が親を再有効化したときに正しく再有効化されないインクリメンタルコンバージョンの問題が修正されました。
Entityインスペクタの内容が既存のインスペクタと重複してしまうという問題が修正されました。
Systemインスペクタの複数のインスペクタで、最新のインスペクタにのみコンテンツがあり、残りのインスペクタは空であるという問題を修正しました。
初期化時にTypeManagerのTypeCacheを使用するようになり、従来の約2倍の速さになりました。
冗長なエラーメッセージが記録されることがありましたが、修正されました。
特定の NativeArray<Entity> に処理を限定する EntityQuery メソッドは、EntityQuery がチャンクフィルタリングを使用している場合、正しく動作するようになりました。
IJobEntityBatchWithIndex の特定のコードパスが、バッチごとのベースエンティティインデックスを正しいバイトオフセットで保存していませんでした。
IJobEntityBatchWithIndex.ScheduleInternal() が、EntityQuery チャンクフィルタリングと limitToEntityArray の両方が有効な場合に正しく動作しないことがありました。
limitToEntityArray パラメータを取る IJobEntityBatchWithIndex.Run() のバリアントは、もはやアサートされません。
IJobEntityBatch は、スケジュール時と実行時の両方でチャンクフィルタリングを冗長に適用していました。
EntityCommandBuffer は、コマンドが決して再生されない埋め込みエンティティ配列をリークしなくなりました。
EntityQuery を受け取るメソッドは、クエリの有効性を検証するようになりました。
EntityManager メソッドに不足している境界チェックを追加しました。
システムの自動ソートを無効にする ComponentSystemGroup は、更新のたびに "sort order is dirty" フラグを設定しなくなりました。
EntityQuery.SetSingleton<T>() は、クエリが T 型への読み取り専用アクセスのみを要求した場合、例外をスローするようになりました。
EntityQuery.GetSingleton<T>() および EntityQuery.SetSingleton<T>() が、T がゼロサイズのコンポーネントであることを表明するようになり、境界外メモリアクセスの可能性を回避できるようになりました。
None 型の空でないリストで EntityQuery を作成すると、常に新しいクエリを作成するのではなく、可能であれば既存のクエリへの参照が返されるようになりました。
ForEntityQuery() コマンドの EntityCommandBuffer 再生が、コレクション・チェックが有効な場合に AtomicSafetyHandle 割り当てをリークしないようになりました。
BlobAssetsを持つWorldがdisposedされた場合、BlobAssetsのメモリリークが発生します。主にエディタでプレイモードに入ったり出たりするときに見られます。
Burst コンパイルが無効な場合、XXHash3 が例外をスローする可能性がありました。このようなことはもうありません。
GhostAuthoringComponent インスペクタの variant チェックボックスは、そのコンポーネントの variant が存在しない場合に無効となり、ユーザが DoNotSerialize variation を選択できないことがありました。
SendToOwner がクライアントによって正しく処理されていませんでした。現在は、サーバとクライアントの両方が、ゴーストが GhostOwnerComponent を提示する場合にのみコンポーネントを送信/受信しないようになりました。(訳者注:これはNetcode関連?)
コンパイルされたシェーダ機能がないため、SubScene用にベイクされたライトマップが黒く表示されることがなくなりました。
クランプコンピュートシェーダーのサポート検出で、GL < 4.3 を無効にした。
複数のパッケージを更新する場合、他のパッケージのヘッダで新しいセクションを作成します。
EntityDiffer は UnityEngine.Object タイプから BlobAsset または Entity 参照をパッチしなくなりました。
ソースで生成された Entities.ForEach のデバッグ
一部のメインスレッドの EntityCommandBuffer メソッドには、必要な安全チェックが欠けていました。
StructuralChangeProfiler は、EntityCommandBuffer および EntityManager を通して変更を加える際に、適切なスコープを持つようになりました。
Entities 0.19.0
追加
Sourcegenの使用をオプトインした場合、[GenerateAuthoringComponent]を通してRegisterBindingAttributeを使用する。
エンティティに割り当てられた名前は、エディタ内だけでなく、すべてのビルドでデフォルトで使用できるようになりました。ビルドからエンティティのデバッグ名を削除するには、プロジェクトのビルド構成で DOTS_DISABLE_DEBUG_NAMES を定義してください。
エンティティシーンヘッダーの非同期読み込みのサポートを追加しました(デフォルトでは無効です)。
IJobChunk、IJobEntityBatch、IJobEntityBatchWithIndex、およびIJobParallelForDeferは、すべての .Schedule() と .Run() メソッドの ByRef() バージョンを持っているようになりました。これらは、対応するジョブ構造体が大きすぎて既存のメソッドに値で渡せない場合 (~10KB 以上) に使用されるべきです。それ以外の機能は、既存のメソッドと同じです。
Unmanaged EntityQueryDescBuilder により、Burst コードでエンティティクエリを構築できるようになりました。
リリースビルドでは、エンティティのデバッグ名はデフォルトで無効になります。新しいビルドコンポーネント "Enable Entity Names" をリリースビルドの設定に追加すると、アプリケーションでこれらの名前を使用する場合に、これらの名前を再度有効にすることができます。
SystemRef<T> と SystemHandle<T> は、管理されていないシステムを追跡する方法を提供します。
com.unity.properties と com.unity.serialization を 1.7.0 に更新しました。
(EXPERIMENTAL) 新しいスクリプト定義 (UNITY_DOTS_DEBUG) は、スタンドアロンビルドで安価な API 検証とエラー処理のサブセットを可能にします。
変更
platformパッケージを0.12.0-preview.8へ更新しました。
手動テスト、不具合修正
LiveLinkのビューモード(エディタのDOTSメニューの下)の名称をより分かりやすいものに変更しました。DOTS->Conversion Settings
Roslynコンパイラーをバージョンアップし、ソースジェネレーターの機能を有効にしました。EntityQueryManager + EntityQueryのバースト互換性テストが追加されました。
DOTS_DISABLED_DEBUG_NAMES を有効にすると、EntityCommandBuffer.SetName のオーバーヘッドが最小になるようにしました。UNITY_2020_2_OR_NEWER、UNITY_DOTSPLAYER、UNITY_DOTSRUNTIME、NET_DOTSの多くの使用をクリーンアップしました。EntityArchetype に、コンポーネントタイプの安定ハッシュから計算されたアーキタイプの安定ハッシュを表す StableHash を追加しました。
非推奨
SceneBundleHandle.UseAssetBundlesは非推奨です。それは、もはや何の用途もなく、公開されることを意図していませんでした。
EntityQuery.CompareQuery() は、管理された EntityQueryDesc を使用します。 代わりに、EntityQueryDescBuilder を受け入れるバリアントを使用してください。
WordStorage、NumberedWords、および Words は、パブリックな使用は推奨されないため、非推奨とマークされています。
削除
FastEquality.Layoutの構造体を削除しました。
EntitiesBurstCompatibilityTests は削除され、Entities テストプロジェクトに配置されました。
修正済み
階層を有効にすると、親エンティティの子配列の作成に失敗することがありました。
X 軸で -32785 単位を超えてレンダリングされないエンティティを修正しました。
StorageInfoFromEntity で、Entity タイプに対する不正な読み取りアクセス許可が原因で例外が発生する問題が発生しました。
BlobBuilderで構築されたBlobアセットが常に正しく整列されるようになりました。
Android で SubScenes を使用して DOTS ゲームをビルドする際に 'catalog.bin' ファイルが見つからない問題を修正
BlobAssetReferenceDataはIEqualityインターフェイスを実装していないため、基礎となるデータポインタが同じであってもBlobAssetReferenceの比較に失敗することがありました。
複数のパッケージを更新する場合は、他のパッケージの新しいヘッダーで新しいセクションを作成します。
ComponentSystemSorter の警告で、修正候補に欠けていた閉じ中カッコを追加しました。
シーンストリーミングは、以前のロードがエラーで失敗した場合、NullPointerException を送出しなくなりました。
マネージドコンポーネントの EntityCommandBuffer.AddComponent() が、コンポーネントの二重廃棄をトリガーしないようになりました。
エンティティ・デバッガで、構造体システムのタイミング情報が表示されない問題を修正しました。
ISystemBaseStartStop を実装した構造体システムが、二重の停止通知を受け取らないようになりました。
WASMでSDFフォントが正しいアンチエイリアスでレンダリングされるようになりました。
Entities 0.18.0
追加
トグル対応
AddSharedComponentForEntityQuery(EntityQuery, T) と SetSharedComponentForEntityQuery(EntityQuery, T) を追加しました。どちらのメソッドも、再生時ではなく、記録時に変更するエンティティのセットを「捕捉」する。
BufferAllocatorVirtualMemory:固定サイズのバッファを仮想メモリでバックアップして割り当てる。
BufferAllocatorHeap 固定サイズバッファのヒープバックアップされた割り当てに使用します。
再生時ではなく記録時にクエリを実行するマネージドコンポーネント用の EntityCommandBuffer メソッド:AddComponentObjectForEntityQuery および SetComponentObjectForEntityQuery。
EntityQuery に新しいメソッド GetEntityQueryDesc を追加しました。これは、クエリを再作成することができる EntityQueryDesc を取得するために使用されます。
DstEntityManager.AddComponentObject() を使用した変換で HybridComponent の追加をサポートしました。サポートは、Unityによってすでに提供されている組み込み型に限定され、カスタムコンポーネントは含まれません。
スタンドアロンビルドでは、デフォルトでエンティティデバッグ名ストレージの使用をオプトアウトします。オプトアウトすると、EntityManager.GetName はデフォルトの文字列を返し、EntityManager.SetName は省略されます。このデフォルトを上書きして、スタンドアロン ビルドにデバッグ名を含めるには、Player の「スクリプト定義」フィールドで DOTS_USE_DEBUG_NAMES を定義します。
EntityCommandBuffer.SetName によって、EntityCommandBuffer.CreateEntity から作成された Entity にデバッグ名を設定することができます。
GameObjectSceneUtility.AddGameObjectSceneReferences() は、カスタム Entity Bootstrap コードで使用でき、現在ロードされている Game Object Scene が GameObjectSceneSystem なしでロードされた場合 (例えば Editor で Play ボタンを押す) 、参照先として追加されるようにしました。
新しい StorageInfoFromEntity 構造体は、エンティティがどのように保存されているかについての情報 (その ArchetypeChunk やチャンクの中のインデックスなど) をジョブ内から読み取ることができます。また、StorageInfoFromEntityを使用して、Entityが存在するかどうか、またはそれが破棄されたかどうかを確認することができます。
シーンセクションストリーミングのスロットルを調整するために、ConcurrentSectionStreamCount と MaximumWorldsMovedPerUpdate が SceneSectionStreamingSystem で設定できるようになりました。
変更
サンプルシーンで、トグルの状態に応じてテキストが更新されるようになりました。
EntityCommandBuffer.ParallelWriter は、メイン スレッドで記録してもスローされなくなりました。(このスローは「不適切な」使用を防ぐために追加されましたが、メイン スレッドで ECB.ParallelWriter に記録しても実際には何も問題はありません)。
platformパッケージを 0.11.0-preview.10 に更新しました。
プラットフォームの機能に応じて BufferAllocatorVirtualMemory か BufferAllocatorHeap のどちらかを選択する BufferAllocator を追加しました。
EntityManager.SetName()およびEntityManager.GetName()のパフォーマンスの向上。EntityManager.GetName(FixedString64)を追加。EntityManager.SetName(Entity、out FixedString64)を追加。EntityManager.GetName または EntityManager.SetName に無効または削除された Entity を渡すと、有効な操作になる問題を修正しました。この関数は、Entity が無効な場合、ArgumentException を投げるようになりました。
EntityManager.GetName() は、指定された Entity が World に存在しない場合、"ENTITY_NOT_FOUND" を含む関連文字列を返します。
同じ guid を指す非同期アーティファクトが複数ある場合、AssetDependencyTracker が高速化されました。
ResolveSceneReferenceSystemに、インスタンス化されたエンティティシーンの高速パスが追加されました(例:シーンタイルストリーミングの場合)。
エディターの最小バージョンを 2020.2.1f1-dots.3 に更新。platformパッケージを 0.11.0-preview.11 に更新。propertiesパッケージを 1.6.0-preview に更新。serializationパッケージを1.6.2-preview に更新
com.unity.burst を 1.4.4 に更新しました。
EntityQuery メソッド (.ToEntityArray(), .ToComponentDataArray(), .CopyFromComponentDataArray()) は、十分に大きなワークロードに対して複数のワーカスレッドに作業を分散させます。
EntityScene は、新しい File フォーマットに依存するようになり、デシリアライズ中のメモリ コピーが減少しました。
MemoryBinaryReader のコンストラクタが、メモリブロックの長さを受け取り、境界外からの読み込みをチェックするようになりました。
BinaryReader および BinaryWriter インターフェースに、ストリーム内のシークに設定可能な Position プロパティが追加されました。
ResolveSceneReferenceSystemのパフォーマンスが改善されました。
EntityQuery.IsEmptyIgnoreFilter, GetSingleton(), GetSingletonEntity(), SetSingleton() のパフォーマンスが向上し、頻繁に変更されるクエリに対応できるようになりました。
非推奨
再生時に EntityQuery を実行する EntityCommandBuffer メソッドは、現在非推奨です。代わりに、名前が "ForEntityQuery" で終わるメソッドを使用してください。これらの "ForEntityQuery" メソッドは、「記録時」(メソッドが呼び出されたとき)にクエリを実行します。
GameObjectConversionSystem.AddHybridComponent()
StreamBinaryReader と StreamBinaryWriter は非推奨となり、パブリック API の一部ではなくなりました。必要な場合は、独自の実装を提供してください。
削除
非推奨のGameObjectEntity.CopyAllComponentsToEntity, EntityManager.Instantiate(GameObject), GameObjectConversionUtility.ConvertIncremental, ScriptBehaviourUpdateOrder.UpdatePlayerLoop, ScriptBehaviourUpdateOrder.IsWorldInPlayerLoop and TypeManager.TypeCategory.Classを廃止した。
これらの期限切れの非推奨APIを削除しました。EntitySelectionProxy.EntityControlSelectButtonHandler, EntitySelectionProxy.EntityControlSelectButton, EntitySelectionProxy.EntityManager, EntitySelectionProxy.OnEntityControlSelectButton, EntitySelectionProxy.SetEntity
期限切れのAPIを削除しました:ArchetypeChunk.BatchEntityCount
期限切れの固定時間ステップAPIを削除。ComponentSystemGroup.UpdateCallback、FixedStepSimulationSystemGroup.MaximumDeltaTime、 FixedRateUtils.EnableFixedRateWithCatchup/nableFixedRateSimple/DisableFixedRate
期限切れのFrozenコンポーネントを削除
期限切れの GameObjectConversionSettings.Fork メソッドと GameObjectConversionSettings.NamespaceId フィールドを削除しました。
期限切れの EntityGuid.NamespaceId フィールドを削除しました。
GameObjectConversionUtility.GetEntityGuidメソッドの期限切れを削除しました。
修正済み
トグルとボタンのTargetGraphicフィールドが変換されるようになりました
コンポーネントの追加メニューから、エンティティパッケージの各種テスト用コンポーネントを削除しました。
EntityQuery のマッチングチャンクキャッシュが一時的に古くなる場合があった。
インスペクタで無効なエンティティを検査しても、例外が発生しなくなりました。
まれに、存在しなくなったシーンにサブシーンが表示されたままになる問題がありました (エディタのみ)。
エディタに読み込まれた複数のアセンブリに同じ typeof(myObjectType).FullName が存在する場合に、UnityEngine.Object コンポーネントタイプが衝突しないように StableTypeHash を使用するようにしました。
チャンクのアーキタイプをインプレースで変更する際に発生し得るアウトオブバウンズのメモリアクセスを修正しました。
エディタにロードされた同じ名前のアセンブリが、辞書への追加に使用される重複したキーのために EntitiesILPostProcessor で ArgumentException がスローされるバグが修正されました。
SceneSystem.GetGUID が、小文字/大文字の不一致で同等のファイルパスとのマッチングに失敗することがありました。
[ExcludeAlways] を使用したシステムの使用に対する警告が、2020.2 以降の Unity のバージョンでトリガーされないことを確認しました。
.asmdefファイルで空の配列[]に定義されたprecompiledreferencesが、OSXマシンでbuildprogramにエラーを投げる可能性がある問題を修正しました。
BlobAssetReference<T>の内容をデバッグすることができるようになりました。
互換性のないフィールドがBindingRegistryに挿入できないことによる過剰な警告を削除しました。
変換システムおよびロード後処理システムの親グループを対応するWorldFilterFlagsでマークすることにより、グループ化できるようになりました
EntityDebuggerは、名前が重複するワールドを非表示にしなくなりました。
ジョブスレッドを使用している場合、EntityQuery.IsEmptyが保留中のジョブで変更された変更フィルタを考慮しないバグが発生しました。
チャンクに表示される順序でエンティティが YAML に書き込まれるようになりました。
EntityManager.DestroyEntity(EntityQuery) を呼び出した後に IJobEntityBatch を使用すると、NullReferenceException が発生することがある。
EntityManager.GetCreatedAndDestroyedEntities() は、新しいエンティティ リストの ChunkHeader エンティティを返さなくなりました。
複数のセクションとそれらのセクション間の参照で複数回インスタンス化されたシーンのストリーミングで、エンティティ ID が正しくリマップされないバグが修正されました。
Chunk.SequenceNumber (Internal API) は、ディスクからチャンクをデシリアライズする際にユニークであることが保証されるようになりました。SequenceNumbers は、変更を検出するための内部ワールドの差分メソッドで使用されます。
EntityManager 内のすべてのエンティティを破棄する際の GetSingletonEntity() HRV2 エラーの修正
組み込みモジュールParticle Systemを削除した際のコンパイルエラー
サブシーンで無効化されたオートロードが再び正しく機能するようになった
エンティティの名前を複数回変更できなかった回帰
インスペクションされたエンティティからダイナミックバッファが削除されたときに Entity inspector がスローするのを修正しました。
Tiny.UI "Hidden "の計算を修正しました。
EntityManagerDebugView がメタエンティティ(チャンクコンポーネント用)および共有コンポーネントも表示するようになりました。
ジェネリックメソッドで BlobBuilder を使用しても、安全性エラーが発生しなくなりました。
IJob を使用する多くのメソッドは、その真の Burst 互換性を反映するために [NotBurstCompatible] とマークされました。
Hybrid Renderer の変更点まとめ
Hybrid Renderer 0.50.0
追加
Hybrid Rendererは、必要なサポートが存在しないか、コマンドラインで-nographicsが指定されると、自動的に無効化されます。
削除
ハイブリッドレンダラーV1が削除されました。V2がデフォルトのレンダラです
修正
データのアップロードが行われないフレームでのメモリリークを修正しました。
HybridRendererSystem は、そのコンポーネントの読み取り/書き込みの依存性をすべて正しく追跡していませんでした。
誤ったマテリアルに関する警告は、それらに対処するのに十分な情報を持っていませんでした。
Hybrid Renderer 0.13.0
削除
コンパイラの警告を引き起こす可能性のある未使用の内部構造体を削除しました。
修正
アンビエントライトプローブを使用するエンティティには SH コンポーネントがなくなり、メモリ使用量も大幅に削減されました。
グローバルアンビエントプローブが正しくレンダリングされない場合がある不具合を修正
Hybrid Renderer 0.12.0
追加
最後のフレームから新しいチャンクの数をカウントし、newChunks 配列を満たす役割を担う CountNewChunksJob。
新しい #define DISABLE_HYBRID_LIGHT_PROBES は、メモリを節約するためにライトプローブをグローバルに無効化するためのものです。
変更
(Root)LodRequirementコンポーネントは、(Root)LodRangeと(Root)LodWorldReferencePointに分割されました。LOD範囲は変換時に作成され、ワールド基準点はフレームごとに再計算されます。これらを分割することで、パフォーマンスを最適化することができます。
LOD/HLODグループにLODGroupWorldReferencePointコンポーネントが追加されました。リーフエンティティごとに繰り返し作業を行う代わりに、グループごとに一度だけLODピボットポイントを変換して保存できるようにします。LODRequirementSystem の合計パフォーマンスが最大で 2 倍になります (上記の最適化と組み合わせた場合)。
GetComponentTypeHandle<>()コールを各ジョブで実行する代わりにキャッシュします。
UpdateAllHybridChunksJob は、最後のフレーム以降の新しいチャンクの数をもう数えません。
HybridRendererSystem のシェーダ・リフレクション・バージョンの変更を追跡しなくなりました。新しいシステムが StructuralChangePresentationSystemGroup の中でその世話をするようになりました。
HybridRendererSystemでチャンクの追加/削除をしなくなった。新しいシステムがStructuralChangePresentationSystemGroupの中でその処理を行うようになりました。
エディターの最小バージョンを 2020.2.1f1-dots.3 に更新 *Samples プロジェクトを 2020.2.1f1-dots.3 エディターで問題やコンソールエラーなしにロードしました。
修正
LiveLinkインクリメンタルアップデートを使用してエンティティが削除されたり、LODコンポーネントが変更されたりすると、LODビットフィールドが古くなることがある。
インスタンスのGPU割り当て動作におけるエッジケースのバグを修正。
インクリメンタルコンバージョン中のライトマップドオブジェクトのGameObject変換を改善。
プローブグリッドが利用できない場合のアンビエントプローブ更新に関連するパフォーマンスのリグレッションを修正
HybridRendererSystemの構造変更を行わなくなった。
静的オブジェクトは、MeshRenderer の設定に関係なく、常にオブジェクトごとのモーション ベクトルを無効にするようになりました。
Netcode の変更点まとめ
Netcode 0.50.0
追加
ゴーストの予測モードを切り替えるための新しいメソッド GhostSpawnSystem.ConvertGhostToInterpolated および GhostSpawnSystem.ConvertGhostToPredicted を追加しました。このメソッドにはオプションの移行時間パラメータがあり、0 でない場合は視覚的な変換を古い状態から新しい状態にスムーズに移行させます。
プレハブのロード中に GhostCollectionPrefab.Loading を GhostCollectionPrefab.LoadingState.LoadingActive に設定することにより、クライアントがオンデマンドでゴーストプレハブをロードできるようになりました。
サーバーとクライアントの両方がゲーム内にいる間、ランタイムで事前にスポーンされたゴーストを持つ新しいサブシーンを動的にロードする可能性を追加しました。
クライアントがサーバーに対してロードされたシーンのサブセットのみを持つ可能性を追加しました。クライアントは、必要に応じてそれらをロード/アンロードすることができます。
DisableAutomaticPrespawnSectionReportingコンポーネントでシングルトンを作成すると、ビルトインのサブシーンの同期を無効にして、独自のロジックを実装することができます。より複雑なストリーミングシナリオやその他の特別なニーズを実装するために使用することができます。
FirstSendImportanceMultiplierをサポートし、新しい(クライアントにとって)ゴーストの重要性を人為的に高めるために使用することができます。つまり、MinSendImportanceが高い場合でも、すべてのゴーストを迅速にクライアントに送信できるようにします。
NetworkDriver と関連する接続エンティティのマイグレーションを可能にする DriverMigrationSystem。動作例を見るには、WorldMigrationTests を参照してください。
Netcode bootstrap が ISystemBase システムを扱えるようになりました。
NetDbg は、フォーカスしたとき、または最初に開いたときに、手動で disconnect を呼び出さない限り、自動接続されるようになりました。
ICommandDataが予測されるゴースト上にあり、現在の接続によって所有され、オーサリングコンポーネントのSupportAutoCommandTargetが有効になっている場合、CommandTargetComponentを設定せずにコマンドを送信することができるようになりました。SupportAutoCommandTarget は、AutoCommandTarget コンポーネントを追加し、サーバーは Enabled メンバーを false に設定して、コマンドの送信を防ぐことができます。
AutoCommandTarget は、複数のエンティティのコマンド送信に使用できます。また、AutoCommandTargetとCommandTargetComponentの両方で、同じエンティティに複数のICommandDataを持つことが可能です。
ClientServerTickRate.MaxSimulationLongStepTimeMultiplier を追加し、フレーム内でより多くのティックを実行する代わりに、あるいはそれに加えて、より長いデルタタイムでサーバーティックを実行できるようになりました。
フレーム内で複数のティックを必要とする場合に、サーバーがすべてのティックのスナップショットを送信するか、最後のティックだけを送信するかを決定する ClientServerTickRate.SendSnapshotsForCatchUpTicks を追加しました。デフォルトでは、最後のティックに対してのみスナップショットを送信します。
変更
GhostFieldAttribute.MaxSmoothingDistanceをint型からfloat型に変更しました。
より長いワールド名を考慮し、ConnectionAcceptJob.debugPrefixをFixedString32からFixedString128に変更しました。
despawningが多数のゴーストのデスポーニングを同時に処理できるようにしました。これはまた、デスポーンに必要な帯域幅を減らしますが、パケットロスがある場合、デスポーンのレイテンシーを増加させる可能性があります。
UpdateInWorldはUpdateInWorldAttributeに名称変更されました。
UpdateInWorld.TargetWorld enum を Unity.NetCode 名前空間へ移動しました。
サーバーとの接続を切断することなく、「ゲーム内」から入退場できるようになりました。
サーバーは、すべてのクライアントへのゴーストのストリーミングを停止し(ゲームから終了)、新しいシーン/サブシーンをロードして、再びゴーストのストリーミングを開始することができるようになりました。
GhostPredictionDebugSystemはNetDbgが接続されているときのみ実行され、より多くのエラーを並行して処理し、パフォーマンスを向上させます。
dots-runtimeの移植性のために、TimeSpanの代わりにstopwatchを使用します。
ゴーストステートを適用する際のティックの扱いを改善し、ロールバックする状態がない場合のエラーを回避しました。
サーバーは、事前にスポーンされたすべてのゴーストに一意のIDを割り当てる責任があります。
生成されるシリアライザーのすべての型に修飾名を使用するようになりました。
デバッグログはcom.unity.loggingを使用して実装されています。
サーバー側でコマンドターゲットが設定されている場合、ICommandDataバッファを持つかどうかの検証チェックを追加。
非NULLエンティティターゲットが設定され、コマンドデータバッファが存在しない場合、サーバー上でコマンド年齢が更新されないように修正しました。これは、常に予測ループ数を増加させ、フレームレートを低下させるクライアント上の問題を引き起こしていました。
事前に生成されたゴーストエンティティは変換中に無効になり、ベースラインが初期化された後、ランタイムに再度有効になります。これにより、エンティティが準備される前にユーザーコードがコンポーネントを変更することを防ぎ、結果としてpre-spawned ghostハッシュ検証の失敗を回避することができます。
ICommandData/IRpcCommandのフィールド、またはIComponentData/IBufferElementの複製されたフィールドが、サーバープレフィックス __GHOST または __COMMAND で始まる場合、エラーが報告されます。
アウト・アウトのDisableLagCompensationをオプトインのLagCompensationConfigに置き換えた。
以前は非推奨だったGhostCollectionAuthoringComponentを削除しました。
非推奨の ConvertToClientServerEntity を廃止しました。これは、古いソース ジェネレーターがゴーストのランタイム変換をサポートできなかったために非推奨となったもので、新しいソース ジェネレーターではそのような問題はありません。新しいソースジェネレータでは問題ありません。ゴーストを含むすべてのものにサブシーンを使用することをお勧めします。
NetworkStreamCloseSystem は、NetworkReceiveSystemGroup に移動しました。
ネットワーク接続エンティティに LinkedEntityGroup が追加され、簡単なケースでは切断時にゴーストを削除することが容易になりました。
GhostAuthoringComponent に新しいチェックボックスが追加され、追加のオーサリング コンポーネントなしで GhostOwnerComponent をゴーストに追加できるようになりました。
SceneLoadingTests は、Editor のみのテストではありません。
Websocket の DebugWebSocket のコードが il2cpp のテスト用に修正された
修正
GhostAuthoringEditor がコンポーネントに割り当てられた正しいデフォルトの variant を表示しない問題を修正しました。
メモリリークを修正しました。GhostVariantAssignmentCollection の blob データが破棄されない。
ゴーストバリアントキャッシュの問題を修正しました。アノテーションされた構造体が public である場合にのみ、GhostComponentVariation 属性が収集されました。
古くなった入力はサーバーの入力バッファに保存されなくなりました。これにより、現在の入力状態と最後のフレームの状態を比較することがより確実になりました。
報告された処理時間が計算された差分時間より大きい場合、RTT計算でのオーバーフローを回避しました。
子エンティティのハッシュ計算を修正
RpcCommandRequest.SendRpcData' のアクセス性を protected から public に変更し、汎用 RPC タイプで汎用ジョブを登録する際に発生する不整合エラーを修正しました。
ランダムなクラッシュの原因となっていた誤った統計パケットサイズを修正しました。
GhostStatsSystemがNetworkAckComponentシングルトンが存在しないときにアクセスしようとするのを修正しました(クライアントのみ)。
GhostSnapshotValueULong のタイプミスにより、RPC に unsigned long フィールドが含まれる場合にコンパイル エラーが発生します。
LogAssert.ignoreFailingMessages が true にリセットされないため、一部の失敗したテストが報告されないことがありました。
IrrelevantImportanceDownScale が 1 未満にならないようにガードされるようになりました。
SnapshotDataBuffer と SnapshotDynamicDataBuffer が [InternalBufferCapacity(0)] を使用するようになり、チャンク内のエンティティ サイズが縮小されるようになりました。
生成されたシリアライザークラスが、正しい名前空間を先頭に付けずに型をキャストしようとしたため、コンパイルエラーが発生しました。
名前空間、typename、またはフィールド名がダブルアンダースコアで始まっている場合、Ghost gen は GhostCodeGen failed for fragment... と表示されて失敗します。GHOSTXXX または COMMANDXXX キーワードが存在する場合、実際にエラーが報告されます。
無効な Ghost Authoring を作成するときの UX が改善されました。
コンポーネントが複数のインターフェイスを同時に実装している場合、間違ったインターフェイスのコードを生成してしまうというエラーが報告されないようになりました。
PacketLoggerの出力ファイルがスタンドアロンプレーヤーの場合、カレントフォルダーではなくApplication.consoleLogPathに保存されるため、一部のプラットフォーム/環境でエラーが発生することがあった。
コード生成シリアライザを必要とする型が含まれていないアセンブリでは、アセンブリ参照が見つからない場合のコンパイル エラーが報告されなくなりました。
プレハブ内のネストされたコンポーネントをオーバーライドすると、正しいGameObject参照が割り当てられるようになりました。
アップグレードガイド
TargetWorld enum は Unity.NetCode ネームスペースの一部になりました。UpdateInWorld.TargetWorld をすべて TargetWorld に置き換えて、enum の古い値を保持し続けます。
DisableLagCompensation はもう存在しません。ラグ補正を使用していた場合は、それを削除できます。ラグ補正を使用していた場合は、それを実行するためにLagCompensationConfigを追加する必要があります。
GhostCollectionAuthoringComponentは削除されました。代わりに何をすべきかについては、以前のアップグレードガイドとgeting started docページを参照してください。
Netcode 0.8.0
新機能
Roslynソースジェネレータをベースとした新しいコード生成システム。
ゴーストにプリシリアライズのサポートを追加し、毎フレーム、複数のコネクションに送信される複雑なゴーストのシリアライズにおけるCPU時間を短縮。
帯域幅に加えて、CPU時間に基づいてサーバーがシリアライズするデータ量を制御するためのパラメータを追加しました。パラメータは、MinSendImportance、MinDistanceScaledSendImportance、MaxSendChunks、MaxSendEntitiesです。
事前にスポーンされたゴーストのデフォルトのベースラインを追加しました。
新しいクライアントがサーバーに接続する際に、事前に生成されたゴーストの帯域幅(およびCPU)を最適化する機能を追加しました。デフォルトのベースラインに対して変更されたpre-spawned ghostsのみが送信されます。静的最適化がオンになっている場合、変更されない限り、prespawnsのデータは送信されません。
ランタイムのクライアント/サーバー検証を追加し、プレポーンゴーストのベースラインとサブシーンがクライアントとサーバーの両方で同じデータを持っていることを確認できるようになりました。
変更
NetCodeで作成されたエンティティに適切な名前が付けられるようになりました。
IGhostDefaultOverridesModifier を削除しました。
コンポーネント/バッファのシリアライズを修正/変更する場合は、代わりに GhostComponentVariation を使用する必要があります。
カスタムテンプレートを追加するには、UserDefinedTemplatesという部分クラスを実装する必要があります。
NetCodeで生成されたクラスは、プロジェクトに表示されなくなりました。
NetCodeコード生成ウィンドウは削除されました。
GhostSendSystem.KeepSnapshotHistoryOnStructuralChange が true(デフォルト)に設定されている場合、一部のケースで構造変更時にスナップショットの履歴を保持することが可能になりました。
プリスポーンのGhostIdと通常のゴーストのGhostIdは分離された2つのセットになりました。プリポーンのゴーストIDは31ビット目が設定されているため、負の整数値となります。
修正
ICommandData 構造体でエンティティを使用する際の不正なコードジーンを修正しました。
CreatePredictedSpawnPrefabが子エンティティをインスタンス化しないようにした。
シャットダウン時に切断メッセージが送信されない問題を修正
エンティティに構造的な変更があった場合に、ごくまれに無効なベースラインが使用されることがある問題を修正しました。
ゴースト予測ループで物理が実行され、PhysicMassOverride.IsKinematic が 1 に設定されている場合、予測されたゴーストの移動と回転は修正されない。
クライアントに送信されたことのないエンティティが無関係になったときに、despawn メッセージが不要になりました。
ダイナミックバッファ変更マスクが適切にクリーンアップされず、バッファが常に変更されたと報告されるのを修正
クライアントがゲーム内にいないとき、latestSnapshotEstimateがリセットされないのを修正。
静的最適化がオンになっている予測されるゴーストに対して、PredictionHistoryBufferが更新されない問題を修正
最後のクライアントがゲームを終了した場合、GhostSendSystem が適切にクリーンアップされない問題を修正。
アップグレードガイド
Assets/NetCodeGenerated フォルダーは、アップグレードの前後に削除する必要があります。アップグレード後にこのフォルダーを削除すると、コンパイルエラーが発生する場合があります。
プロジェクトでモディファイアやテンプレートを使ってコード生成をカスタマイズしていた場合は、追加の手順が必要です。
プロジェクトでカスタム・テンプレートを使用している場合
プロジェクト内に新しいフォルダを作成し、NetCodeへのアセンブリリファレンスを追加します。例えば
+ CodeGenCustomization/
+ NetCodeRef/
NetCode.asmref
+ Templates/
Templates.asmdef (has NETCODE_CODEGEN_TEMPLATES define constraints)
ここにテンプレートとサブタイプの定義を配置します。以下にその手順を示しますが、詳細については、更新されたドキュメントを参照してください。
テンプレート登録の再実装
新規ファイルを作成し、netcode.asmrefのあるフォルダ(例ではNetCodeRef)内にUserDefinedTemplatesの部分クラスを追加してください。そして、static partial void RegisterTemplates(...)メソッドを実装すると、ここにテンプレートが登録されます。
using System.Collections.Generic;
namespace Unity.NetCode.Generators
{
public static partial class UserDefinedTemplates
{
static partial void RegisterTemplates(List<TypeRegistryEntry> templates, string defaultRootPath)
{
templates.AddRange(new[]{
new TypeRegistryEntry
{
Type = "Unity.Mathematics.float3",
SubType = Unity.NetCode.GhostFieldSubType.Translation2d,
Quantized = true,
Smoothing = SmoothingAction.InterpolateAndExtrapolate,
SupportCommand = false,
Composite = false,
Template = "Assets/Samples/NetCodeGen/Templates/Translation2d.cs",
TemplateOverride = "",
},
}
}
}
}
新しいサブタイプの定義
テンプレートでサブタイプを使用する場合(上記の例のように)、ネットコードアセンブリリファレンスフォルダ内にUnity.NetCode.GhostFieldSubType型の部分クラスを追加する必要があります。例えば
namespace Unity.NetCode
{
static public partial class GhostFieldSubType
{
public const int MySubType = 1;
}
}
新しいサブタイプは、現在Unity.NetCodeアセンブリを参照しているプロジェクト内のどこでも利用できるようになります。
GhostComponentModifiersの再実装方法について
ComponentModifiers は削除されたので、代わりに GhostComponentVariation 属性を使用してゴーストコンポーネントのバリアントを作成する必要があります。バリアントを含む新しいファイルを、バリエーションを追加するタイプへの可視性/アクセス権を持つアセンブリに作成します。それから、前に持っていた各修飾について、次の例のようにそれぞれのバリアント実装を作成します。
// Old modifier
new GhostComponentModifier
{
typeFullName = "Unity.Transforms.Translation",
attribute = new GhostComponentAttribute{PrefabType = GhostPrefabType.All, OwnerPredictedSendType = GhostSendType.All, SendDataForChildEntity = false},
fields = new[]
{
new GhostFieldModifier
{
name = "Value",
attribute = new GhostFieldAttribute{Quantization = 100, Smoothing=SmoothingAction.InterpolateAndExtrapolate}
}
},
entityIndex = 0
};
// The new variant
[GhostComponentVariation(typeof(Translation))]
[GhostComponent(SendDataForChildEntity = false)]
public struct MyTranslationVariant
{
[GhostField(Quantization=100, Smoothing=SmoothingAction.InterpolateAndExtrapolate)] public float3 Value;
}
それから、これらの variant をそのコンポーネントで使うデフォルトとして 宣言する必要があります。RegisterDefaultVariants メソッドを実装して、DefaultVariantSystemBase の具象システム実装を作成する必要があります。
class MyDefaultVariantSystem : DefaultVariantSystemBase
{
protected override void RegisterDefaultVariants(Dictionary<ComponentType, System.Type> defaultVariants)
{
defaultVariants.Add(new ComponentType(typeof(Translation)), typeof(MyTranslationVariant));
...
}
}
本システムは、特に設置場所に制限はありません。詳しくは更新されたドキュメントをご参照ください。
Netcode 0.7.0
新機能
ネットワークロギング機能を追加し、より詳細なネットコードデバッグ情報(デバッグレベル)を取得したり、接続ごとにゴーストスナップショットやパケットロギングを有効にするために使用できます。Playmode Tools WindowとNetCodeDebugConfigAuthoringコンポーネントで簡単なトグルがあります。NetCodeDebugSystem.LogLevelを介して、または接続エンティティにEnablePacketLoggingコンポーネントを追加することによって、プログラム的に変更することができます。
ghost predicitonループで物理を実行するためのサポートを追加しました。PredictedPhysicsConfig コンポーネントでシングルトンを作成し、これを有効にします。詳細はマニュアルの物理のセクションを参照してください。
変更
切断理由がトランスポートからネットコードに適切に渡されるようになり、NetworkStreamDisconnectReason 列挙型が Unity.Networking.Transport.DisconnectReason と一致するようになりました。
非推奨
Deprecated GhostCollectionAuthoringComponent、生成したいプレハブへの参照を持つコンポーネントを作成し、そのコンポーネントがシーン内のエンティティに存在することを確認してください。事前にスポーンされたゴーストをコレクションに格納する必要はありません。
修正
クライアント側で補間時間がずれたり、逆戻りすることがある問題を修正しました。
ネットワークコンディションシミュレーターでパケットロスが発生する問題を修正しました。
il2cppのストリッピングがランタイムにエラーを起こす問題を修正しました。
リリースビルドでスナップショットが断片化される問題を修正しました。
アップグレードガイド
ユーザー指定ブートストラップ(ClientServerBootstrapを拡張したクラス)は、クラスに[Preserve]属性を持たなければならない。
Physics の変更点まとめ
Physics 0.50.0
変更
com.unity.burst を 1.5.5 にアップグレードした。
IJobEntityBatchを継承するすべてのジョブで、時代遅れのAPIを削除するようにコードを調整しました。
削除
PhysicsExclude のすべての使用は、Demo および Runtime コードから除外されます。
Physics 0.10.0
アップグレードガイド
物理シミュレーションに関与するすべての Entity (ボディまたはジョイント) に必要な PhysicsWorldIndex 共有コンポーネントが追加されました。このコンポーネントの値は、Entity が属する物理世界のインデックスを表します (BuildPhysicsWorld, StepPhysicsWorld, ExportPhysicsWorld システムで処理されるデフォルトの PhysicsWorld は 0 です)。異なる物理ワールドのエンティティは、共有コンポーネントの値が異なるため、別々のチャンクに格納されることに注意してください。
PhysicsExcludeコンポーネントは廃止されましたが、少なくとも2021-10-01までは機能します。物理シミュレーションからエンティティを除外したい場合に PhysicsExclude を追加する代わりに、必要な PhysicsWorldIndex 共有コンポーネントを削除すれば、同じことを実現できます。
SimulationStepInput に HaveStaticBodiesChanged が追加されました。これはサイズ1のNativeArrayで、スタティックボディの同期の最適化に使用されます。
変更
ランタイムAPI
BlobAssetReferenceColliderExtension関数を追加し、使いやすさと安全でないコードの回避を実現しました。
BlobAssetReference<Collider>.As<To> (Toはデスティネーションのコライダー構造体タイプ) を介して reinterpret_cast のようなロジックを追加しました。この拡張機能は、目的のタイプへの参照を返します。
BlobAssetReference<Collider>.AsPtr<To> (To はデスティネーション collider struct タイプ) を介して reinterpret_cast のようなロジックを追加しました。この拡張機能は希望するタイプへのポインタを返します。
BlobAssetReference<Collider>.AsComponent() を介して PhysicsCollider への簡単な変換ヘルパーを追加しました。
安全でないコードを必要としない ColliderCastInput と ColliderDistanceInput コンストラクタ、および入力構造体の作成後にコライダーを変更する SetCollider 関数を追加しました。
PhysicsWorldData は、PhysicsWorld やその他の物理世界のシミュレーションに必要なデータやクエリをカプセル化した新しい構造体です。
PhysicsWorldBuilder と PhysicsWorldExporter は、PhysicsWorld を構築し、そのデータを ECS コンポーネントにエクスポートするメソッドを提供する新しいユーティリティ クラスで、物理世界のエンティティをフェッチするクエリを調整するオプションも用意されています。
PhysicsWorldStepper は、物理シミュレーションのジョブをスケジューリングするための新しいヘルパークラスです。SimulationCreator デリゲートと ISimulation をインスタンス化する必要があるメソッドでは、物理世界のインデックスが渡される必要があります。
BuildPhysicsWorldは、PhysicsWorldDataにデータを保持し、PhysicsWorldBuilderを使用するようにリファクタリングされています。WorldFilter フィールドに物理ワールド インデックス (0) が保持されるようになりました。
StepPhysicsWorld がリファクタリングされ、PhysicsWorldStepper が使用されるようになりました。
ExportPhysicsWorld は、CollisionWorld をコピーして、そのクエリによってフェッチされた Entity にデータをエクスポートする方法を知っている PhysicsWorldExporter を使用するようにリファクタリングされました。
Collider.Clone() を最適化し、クローン処理中に Collider メモリの余分なコピーを作成しないようにしました。
オーサリング/コンバージョンAPI
Physics Body オーサリングコンポーネントの Advanced セクションに新しいフィールド WorldIndex が追加され、デフォルト値が 0 になりました (デフォルトの PhysicsWorld に属するという意味です)。Physics Body オーサリングコンポーネントを持たないオブジェクトや、階層内の親オブジェクトも、このデフォルト値を取得します。CustomTags フィールドは、Advanced セクションに移動しました。
PhysicsRuntimeExtensions に新しいテンプレート メソッド RegisterPhysicsRuntimeSystem* が追加され、システムの OnStartRunning() メソッドで使用して、デフォルト以外の物理ランタイム データの自動依存関係を管理できるようになりました。これらは既存のテンプレート化されていないものと類似しており、ただ、デフォルトでない物理世界ごとに個別の ComponentData タイプを必要とします。
実行時の動作
複数のPhysicsWorldをサポートし、各ワールドの各ボディを個別のEntityで表現できるようになりました。各エンティティは、その世界での物理シミュレーションに必要なすべてのコンポーネントを持つ必要があります。
デフォルト以外の物理世界は、適切な PhysicsWorldIndex 共有コンポーネントでマークされた Entity から処理(構築、シミュレーション、エクスポート)するカスタム システムを必要とします。物理ワールドの保存も、ユーザーによってコントロールされます。これを容易にするために、多くのユーティリティが追加されました。
修正
Graphical Interpolationにおいて、レンダリングと物理が正確に同期している場合にLocalToWorldが更新されない不具合を修正しました。
ジョイントコンバージョン時のバネ定数計算を修正
関節変換時に設定可能な関節の線形制限を修正
物理デバッグ表示。コライダーエッジの描画のパフォーマンスが向上しました
物理デバッグ表示。球体コライダーのコライダーエッジの描画を改善しました
Physics 0.9.0
アップグレードガイド
RayCastInput/ColliderCastInput' の 'Start/End' プロパティに提供されたデータが長すぎないキャストの長さを生成しているかどうかを確認するための追加チェックが追加されました。許容される最大の長さは 'float.MaxValue' の半分です。
DOTS/Physics/Enable Integrity Checks メニュー項目を切り替えることで、整合性チェックの有効/無効を切り替えられるようになりました。シミュレーションの品質と動作をチェックする場合は、完全性チェックを有効にします。パフォーマンスを測定する場合は、完全性チェックを無効にします。有効な場合、整合性チェックはスタンドアロン実行ファイルの開発ビルドに含まれますが、リリースビルドでは常に除外されます。
RayCastInput と ColliderCastInput の Start & End プロパティに提供されたデータが、長すぎるキャストを生成しないことを確認するための追加チェックが追加されました。許容される最大の長さは float.MaxValue の半分です。
変更
依存関係
Burst を 1.5.3 に更新しました。
Collectionsを 0.17.0-preview.18 に更新しました。
Entities を 0.19.0-preview.30 に更新しました。
Jobs を 0.10.0-preview.18 に更新しました。
Test Frameworkを 1.1.24 に更新しました。
すべての SystemBase 派生クラスに partial キーワードを追加
修正
物理ワールドが空の場合、BuildPhysicsWorld.OnUpdate()からPhysicsWorld.Reset()を呼ぶ前に戻るように修正しました。
DebugDisplay.Managed.Instance.Render() で、MeshTopology.Lines タイプの Debug Display ラインの半分しかレンダリングされないというバグを修正。
シリンダーコライダーのCalculateAabbメソッドで、AABB高さ軸が半径分増加していたバグを修正
完全性チェックがエディタメニューで切り替えられるようになり、開発ビルドで実行できるようになりました。
PlayModeでエディタが一時停止されると、PhysicsDebugDisplayのラインが消えてしまうバグを修正
Physics 0.8.0
変更
依存関係
Collectionsを 0.16.0-preview.22 から 0.17.0-preview.10 に更新しました。
Entities の更新(0.18.0-preview.42 から 0.19.0-preview.17 まで)。
Jobs を 0.9.0-preview.24 から 0.10.0-preview.10 へ更新しました。
ランタイムAPI
CollisionEvent と TriggerEvent が共通の ISimulationEvent インターフェースを実装し、等価で比較可能なようにしました。
ColliderKey を比較可能にしました。
MotionVelocity.IsKinematic プロパティが公開されました。
PhysicsMass.IsKinematic プロパティが公開されました。
PhysicsMassOverride.SetVelocityToZero フィールドを追加しました。PhysicsMassOverride.IsKinematic が 0 以外の値の場合、物体の質量と慣性が無限大になりますが、運動はまだ積分されます。PhysicsMassOverride.SetVelocityToZero も非ゼロ値である場合、キネマティックボディは関連する PhysicsVelocity コンポーネントの値を無視し、移動しなくなります。
実行時の動作
ボディの質量や慣性が無限大の場合、線形ダンピングや角度ダンピングが適用されなくなります。
修正
ExportPhysicsWorld.CheckColliderFilterIntegrity() メソッドにおいて、複合コライダ(またはその子)がフィルタ上のGroupIndexが0でない場合、複合コライダを不正に処理するために誤った整合性エラーを与えていたバグを修正しました。
BuildPhysicsWorld システムの CheckStaticBodyChangesJob に、親コンポーネントタイプの追加変更チェックを追加しました。
Physics 0.7.0
アップグレードガイド
RegisterPhysicsRuntimeSystemReadOnly() と RegisterPhysicsRuntimeSystemReadWrite() (両方とも SystemBase の拡張として登録) は、古い AddInputDependency() と GetOutputDependency() のアプローチの代わりに物理データの依存関係を管理するために使用されるべきものです。ユーザーは UpdateBefore と UpdateAfter システムを従来通り宣言し、さらにシステムの OnStartRunning() で2つの新しい関数のうち1つを呼び出すだけで、以前のように依存関係を手動で組み合わせる必要なく、Dependency プロパティの自動更新を取得するには十分でしょう。物理ランタイムデータをシステムのOnUpdate()で直接読み書きしたい場合、状況は変わっていないことに注意。この場合、物理ランタイムデータに触れている以前のシステムからのジョブが、Dependencyを完了させることによって、まだ完了していることを確認する必要がある。また、BuildPhysicsWorld.AddInputDependencyToComplete() は、物理ワールドに変更が加えられる前に終了する必要があるジョブのために依然として必要で、もしあなたのシステムが、あなたのためにそれを行ってくれる他の二つの物理システムの間にスケジュールされていない場合、必要であることに注意してください。
Constraint.DefaultSpringFrequency と Constraint.DefaultSpringDamping の値が変更されました。元のデフォルトは、デフォルトの fixedDeltaTime と一致するように設定されていたため、50hz シミュレーション タイムステップを想定していました。現在のデフォルトのシミュレーションのステップは60hzであるため、デフォルトのスプリングパラメータはこの仮定に合うように変更されました。この変更は、過度の制約を受けるような複雑なJointのセットアップに影響を与える可能性がありますが、一般的にはセットアップの本来の意図を壊すものではありません。
変更
依存関係
Unity Editor の最小バージョンを 2020.1.0f1 から 2020.2.4f1 に更新しました。
Collectionsを 0.15.0-preview.21 から 0.16.0-preview.22 に更新しました。
Entities のバージョンを 0.17.0-preview.41 から 0.18.0-preview.42 に更新しました。
Jobs を 0.8.0-preview.23 から 0.9.0-preview.24 へ更新しました。
ランタイムAPI
CompoundCollider.Child.Entityと関連するChildCollider.Entityフィールドが追加されました。このフィールドは、子が作られた元のエンティティに戻るリンクを作成するのに便利です。
RigidTransform、MotionVelocity、時間ステップを取り、時間内にトランスフォームを積分する Integrator.Integrate() が追加されました。これは時間的に前方に積分するために使用されますが、必要に応じて積分を元に戻すこともできます(負の時間を提供することによって)。
ModifiableJacobianHeader.HasColliderKeys, ModifiableJacobianHeader.ColliderKeyA and ModifiableJacobianHeader.ColliderKeyB は、ユーザーが読み取るためのものではなく、衝突イベントのデータを埋めるためのものなので削除されました。
SimulationCallbacks.Phase.PostSolveJacobians は実際の使用例がなく、2つのエンジン間で矛盾が生じるため、削除されました。その代わりに、StepPhysicsWorldの後、ExportPhysicsWorldの前にジョブをスケジュールすることで、同様の効果を得ることができます。
Unity.Physics.Math に ClampToMaxLength() が追加され、指定された float3 ベクトルの長さがより大きかった場合、指定された maxLength に短縮されます。
ColliderCastHit と DistanceHit に QueryColliderKey フィールドが追加されました。ColliderCast または ColliderDistance クエリーの入力に非凸のコライダーが含まれる場合、このフィールドには入力コライダーのコライダー キーが含まれます。それ以外の場合、その値は ColliderKey.Empty になります。
依存関係が異なる方法で処理されるようになったため、すべての物理システムから AddInputDependency() と GetOutputDependency() を削除しました (下記参照)。
RegisterPhysicsRuntimeSystemReadOnly() と RegisterPhysicsRuntimeSystemReadWrite() が追加されました。これらは両方とも SystemBase の拡張メソッドで、ランタイム物理データ (PhysicsWorld に格納) との相互作用を宣言するために使用されます。システムの OnStartRunning() でこれらのいずれかを呼び出し (this.RegisterPhysicsRuntimeSystemReadOnly() または this.RegisterPhysicsRuntimeSystemReadWrite() を使用)、物理データとの対話を宣言しなければならず、これは、任意のシステムの SystemBase.Dependency プロパティの自動データ依存性に変換されます。
ColliderKey、ColliderKeyPath、ChildCollider の以前の内部関数がパブリックになり、コライダー階層のトラバースを支援するようになりました。
オーサリング/コンバージョンAPI
新しいCompoundCollider.Child.Entityフィールドは、変換システムを通じて自動的に入力され、PhysicsShapeAuthoringコンポーネントにコンタクトされたGameObjectに関連する変換されたEntityを指すようにします。
このデフォルト設定は、PhysicsRenderEntityコンポーネントデータを追加することでオーバーライドすることができます。この一般的な使用例は、変換された子 Entity に MeshRenderer コンポーネントがなく、階層の別のブランチにあるグラフィカルな表現を持つ別の Entity にリダイレクトすることが望ましい場合です。
PhysicsRenderEntity コンポーネント データを追加しました。これは主に、PhysicsShapeAuthoring コンポーネントを持つ同じ GameObject にグラフィカルな表現がなかった場合に、CompoundCollider.Child.Entity フィールドに入力するために使用されます。
ランタイムの動作
ColliderDistance と ColliderCast クエリが非凸の入力コライダーをサポートするようになりました (コンパウンド、メッシュ、テライン)
修正
ExportPhysicsWorld.OnCreate()メソッドにおいて、BuildPhysicsWorld.OnCreate()がその前に実行されていることに依存していたバグを修正しました。
コンパウンドにコンパウンドチルドレンが含まれる場合の CompoundCollider.RefreshCollisionFilter() の不具合を修正しました。
Havok Physics の変更点まとめ
Havok Physics 0.50.0
変更
com.unity.burst を 1.5.5 にアップグレードしました。
Havok Physics 0.10.0
アップグレードガイド
HaveStaticBodiesChangedはSimulationStepInputに追加され(UnityPhysics changelog参照)、Havokシミュレーションに必要なものです。Havok.Physics.SimulationContext.HaveStaticBodiesChangedとHavok.Physics.HavokSimulation.SetStaticBodiesChangedFlag()は廃止されましたので、代わりに使用してください。
変更
Havok Visual Debuggerは複数の物理ワールドをサポートし、各ワールドを別々のポートで表示します。物理ワールドのポートはワールドのインデックス + HavokConfiguration.Portで定義されます。
修正
ModifiableJacobianHeaderが不正なメモリアドレスにアクセスし、無効なJacobianFlagsが設定されるバグを修正しました。
Havok Physics 0.9.0
変更
依存関係
Burst を 1.5.3 に更新しました。
Collectionsを 0.17.0-preview.18 に更新しました。
Entities を 0.19.0-preview.30 に更新しました。
Jobs を 0.10.0-preview.18 に更新しました。
Physics を 0.9.0-preview.4 に更新しました。
Test Framework を 1.1.24 に更新しました。
SystemBase 由来の全クラスに partial キーワードを追加
修正
[UNI-302] IJacobiansJobで、ModifiableJacobianHeader.FlagsのJacobianFlags.Disabledの設定がHavok c++コードに適切にマップされておらず、おかしな挙動になる不具合を修正しました。
Havok Physics 0.8.0
変更
依存関係
Collectionsを 0.16.0-preview.22 から 0.17.0-preview.10 に更新しました。
Entities の更新(0.18.0-preview.42 から 0.19.0-preview.17 まで)。
Jobs の更新(0.9.0-preview.24 から 0.10.0-preview.10 まで
Physics を 0.7.0-preview.3 から 0.8.0-preview.1 へ更新しました。
修正
[UNI-299] SimulationContext.Reset()で、UnityEngine.Camera.mainがNULLでVisual debuggerが有効な場合にクラッシュする可能性があるバグを修正。
Havok Physics 0.7.0
変更
[UNI-269] 新しいCompoundCollider.Child.Entityと関連するChildCollider.Entityフィールドを追加しました。
[UNI-252] Havokプラグインは現在Havok SDKの2020.2バージョンに基づきます。
依存関係
Unity Editor の最小バージョンを 2020.1.0f1 から 2020.2.4f1 に更新しました。
Collectionsを 0.15.0-preview.21 から 0.16.0-preview.22 に更新しました。
Entities のバージョンを 0.17.0-preview.41 から 0.18.0-preview.42 に更新しました。
Jobs を 0.8.0-preview.23 から 0.9.0-preview.24 へ更新しました。
Physics を 0.6.0-preview.3 から 0.7.0-preview.2 へ更新しました。
修正
[UNI-245] VDBが最初の実行で有効で、2回目の実行で無効になるとクラッシュするバグを修正しました。
[UNI-273] カスタムスプリング周波数とダンピング値がジョイント制約に設定されないバグを修正。
[UNI-272] シミュレーションにダイナミックボディがない場合、イベントストリームが適切にディスポーズされないバグを修正。
[UNI-74] アクティブでないボディからトリガーイベントが発生するようになりました。
[UNI-276] 同じフレームでエンティティが削除され、新しいエンティティが作成され、両方が同じエンティティ インデックスを持っているときに現れるまれなバグを修正しました。以前は、それらはHavok c++コードで不正に同期されていました。
Collections の変更点まとめ
Collections 1.2.3-pre.1
変更
パッケージの依存関係を更新
Collections 1.2.2
変更
com.unity.test-framework パッケージをバージョン 1.1.31 に更新しました。
com.unity.burst パッケージをバージョン 1.6.4 に更新しました。
Collections 1.2.1
修正
アプリケーションの終了とともにWordStorageをシャットダウンし、メモリが解放されたことを確認します。
NativeList.AsDeferredJobArrayアロケータのラベルをAllocator.Invalidに変更し、配列がリストモードであることを推論します。
追加
切り捨てを明示的に許可して文字列をFixedStringにコピーするFixedStringMethods.CopyFromTruncatedの追加
NativeText または UnsafeText タイプの読み取り専用で軽量なコピーを提供する NativeText.ReadOnly タイプを追加しました。
新しいパブリック API AllocatorHandle.UnmanagedUnregister は、マネージドコードを使用せずにアロケータの登録を解除します。
変更
Unity.Collections.NotBurstCompatible からの Native/UnsafeMultiHashMap.GetUniqueKeyArrayNBC 拡張メソッドはもう必要ありません。Burstはタプルに対応しています。オリジナルのメソッドNative/UnsafeMultiHashMap.GetUniqueKeyArrayが再び利用できるようになりました。
1.0.0-pre.4 で導入されたいくつかの NativeArray テストの変更を元に戻した。
一意に表現される AtomicSafetyHandle を含むすべての型に対して静的な安全 ID を作成しました。
Collections 1.1.0
追加
REMOVE_DISPOSE_SENTINEL ifdefs をすべてのコンテナーで使用し、将来的に DisposeSentinel を削除するようにしました。
Bounds check を Fixed/Native/UnsafeList に変更しました。
SetCapacity と TrimExcess を NativeList に追加しました。
カスタムアロケーターのラッパー AllocatorHelper で、カスタムアロケーターの作成と破棄を容易にします。
NativeList<>.ArraysEqual & UnsafeList<>.ArraysEqual
UnsafeList.CopyFrom
変更
アロケータハンドルバージョンの下位15ビットのみが有効である。
修正
RewindableAllocatorで作成されたNativeListのリーク検出でエラーが発生しました。
Native/UnsafeList.ParallelWriter からポインタ・キャッシングを削除しました。
NativeHashSet、NativeHashMap、および NativeMultiHashMap コンテナのジョブで foreach イテレータを使用できない AtomicSafetyHandle 問題が発生しました。
Collections 1.0.0-pre.6
削除
VirtualMemoryUtility
BaselibErrorState
BaselibSourceLocation
VMRange
すべてのNative*コンテナからDisposeSentinel(管理オブジェクト)を削除します。
変更
ネイティブコンテナのメモリ割り当てを、複数のキャッシュラインサイズに合わせました。
UnsafeText がマーシャラブルになりました(汎用フィールド UnsafeList を含みません)。
修正
AllocatorManager.AllocateBlock は、アロケート時にアライメントを無視しなくなりました。
メモリ割り当てのアライメントの計算が冗長で間違っていた。
Collections 1.0.0-pre.5
変更
FixedListNをFixedListNBytesに改名、全てのNに対して、FixedStringも同様に改名。
修正
NativeBitArray、NativeQueue、NativeStream、およびNativeTextは、ジョブ内でカスタムアロケータを使用しても例外をスローしなくなりました
Collections 1.0.0-pre.4
追加
UNITY_DOTS_DEBUGが有効な場合のList*のオーバーフローチェックを修正しました。
NativeArray関連のテストを破棄し、ネイティブリストからの無効なネイティブ配列のテストを更新して、オブジェクトのLengthとインデクサの破棄後にアクセスする際に例外がスローされることを確認しました。
変更
内部依存関係の更新
InvalidatedArrayAccessFromListThrowsInsideJobユニットテストのInvalidatedArrayAccessFromListJobチェックで、AtomicSafetyHandle.CheckAndThrowで投げられるタイプの変更により、ObjectDisposedExceptionを期待するようになりました。
修正
UnsafeList.Lengthを設定すると、ストレージのサイズが適切に変更されるようになりました。
Collections 1.0.0-pre.3
追加
Native/UnsafeList*.RemoveRange* で index/count 引数を指定できるようになりました。
バースト 1.5.2 にアップグレードされました。
UnsafeText を追加しました。
変更
Burst 互換性テストでは、プライベート メソッドがテストされているような印象を与えないように、プライベート メソッドで [BurstCompatible] を明示的に使用するとエラーとして扱うようになりました (サイレント無視ではありません)。
NativeList<T> の汎用制約 T は、UnsafeList<T> に一致するように struct から unmanaged に変更されました。ジェネリックコンテナ内でNativeList<T>を使用する場合、structをunmanagedに変更することで簡単にユーザーコードを修正することができる。
NativeHashMap.GetBucketData を NativeHashMap.GetUnsafeBucketData に改名。
パッケージを1.0.0に更新
HeapString は NativeText に名前を変更しました。NativeText は UnsafeText をベースにしています。
非推奨
FixedList[Byte/Int/Float][32/64/128/256/512] は非推奨となり、FixedList[32/64/128/256/512]<T> というジェネリックに置き換わりました。
UnsafeMultiHashMap<TKey, TValue>.GetUniqueKeyArray は Unity.Collections.NotBurstCompatible 名前空間からの拡張メソッド UnsafeMultiHashMap<TKey, TValue>.GetUniqueKeyValueNBC に置き換えられました。
Unity.Collections.NotBurstCompatible 名前空間の拡張メソッド NativeMultiHashMap<TKey, TValue>.GetUniqueKeyArray に置き換わりました。
NativeList<T>.ToArray を Unity.Collections.NotBurstCompatible の拡張メソッド NativeList<T>.ToArrayNBC に置き換えた。
Unity.Collections.NotBurstCompatible 名前空間の NativeList<T>.CopyFrom が拡張メソッド NativeList<T>.CopyFromNBC に置き換わりました。
Unity.Collections.LowLevel.Unsafe.NotBurstCompatible 名前空間からの拡張メソッドUnsafeAppendBuffer.Add に置き換えられました。
Unity.Collections.LowLevel.Unsafe.NotBurstCompatible 名前空間の拡張メソッド UnsafeAppendBuffer.ToBytesNBC に置き換わった UnsafeAppendBuffer.ToBytes。
Unity.Collections.LowLevel.Unsafe.NotBurstCompatible 名前空間からの拡張メソッド UnsafeAppendBuffer.Reader.ReadNext に置き換えられました。
begin/end 引数を持つ Native/UnsafeList*.RemoveRange*WithBeginEnd メソッドを、index/count 引数を持つ Native/UnsafeList*.RemoveRange* メソッドに変更しました。
UnsafeList を UnsafeList<T> に置き換えました。
VirtualMemoryUtility
削除
NativeQueue.PersistentMemoryBlockCount と NativeQueue.MemoryBlockSize は内部APIになりました。
修正
Burst互換性テストでは、Burst直接呼び出しILポストプロセッサーによって生成される可能性がある、名前に「$」を含むメソッドを無視するようになりました。
xxHash3 がメインスレッド以外のスレッドで初めてアクセスされた場合にスローされる例外を回避するために、アセンブリロード後に xxHash3 が初期化されます。
Collections 0.17.0
追加
String引数を使用するFixedStringNコンストラクタに[NotBurstCompatible]属性を指定します。
NativeQueueコンストラクタに[NotBurstCompatible]属性を追加しました。
UnsafeList<T>.Create と UnsafeList<T>.Destroy API を追加しました。
BurstCompatibilityTests に、Burst 互換性を検証するために複数のアセンブリ名を受け入れるコンストラクタが追加されました。これにより、1 つのテストで複数のアセンブリを検証でき、コストのかかるセットアップのオーバーヘッドを回避することで CI 時間を劇的に短縮することができます。
非推奨の型付き UnsafePtrList を置き換えるために UnsafePtrList<T> が追加されました。
バースト互換性テストは、検査を容易にするために、生成されたコードを Temp ディレクトリに書き込むようになった。
FixedList*.RemoveRange* に index/count 引数を追加しました。
文字列のパースをuint型に修正しました。
非推奨
UnsafePtrList をアンタイプし、UnsafePtrList<T> を代替品として追加しました。
FixedList*.RemoveRange*WithBeginEnd メソッドに begin/end 引数を追加し、 FixedList*.RemoveRange* に index/count 引数を追加しました。
削除
単一引数のFixedString*.Format拡張メソッドを削除し、Clear()とAppend()を使用するようにしました。
CollectionsBurstTests は削除され、Entities テストプロジェクトに配置されました。
com.unity.test-framework.performance プレビューパッケージの依存関係を削除し、それに依存していたパフォーマンスユニットテストを別の場所に移動しました。
修正
非常に短いビット配列でクリアする場合、*BitArray.Clear を使用します。
NativeQueue.AsParallelWriterは、ジョブをチェーンするときにキャッシュする必要がありません。ジョブのスケジューリング時に NativeQueue.AsParallelWriter() を複数回呼び出すことを防止するための不要な安全ハンドルを削除しました。
Collections 0.16.0
非推奨
JobHandle を返す Sort メソッドは非推奨となり、ジョブ構造体を返す新しい SortJob メソッドに置き換わりました。あまり便利ではありませんが、ユーザーは構造体の上で Schedule を呼び出す責任があります。しかし、このパターンは Bursted コードからの一般的なジョブのスケジューリングによりよく対応しています (https://docs.unity3d.com/Packages/com.unity.entities@latest/index.html?subfolder=/manual/ecs_generic_jobs.html を参照してください)。
削除
非推奨のFixedListN.IndexOfとSortJobバリアントの削除
修正
ENABLE_UNITY_COLLECTIONS_CHECKS 定義のスペルが間違っていた。有効化された場合、Memory が妥当なバイト長であるかチェックされるようになりました。
IJob を使用する多くのメソッドは、その真の Burst 互換性を反映するために [NotBurstCompatible] としてマークされました。
変更
com.unity.burst を 1.4.4 に更新しました。
Jobs の変更点まとめ
Jobs 0.50.0
追加
Unity.Entities.RegisterGenericJobTypeAttribute は Unity.Jobs.RegisterGenericJobTypeAttribute として Unity.Jobs に移動されました。
Job reflection data ILPP
IJob* 型は SharedStatic を使用するため、最終的にバーストコンパイルすることができます。
ジョブの初期化は、EntityManager.Initializeまで遅れるのではなく、ドメインの再ロード時に行われるようになりました。
Jobs 0.10.0
変更
IJobParallelForDeferExtensions.Schedule 構造体から非管理型への汎用U制約
Jobs 0.9.0
追加
Yamatoが使用するCLILeakDetectionSwitcher
Mathematicsの変更点まとめ
Mathematics 1.2.5
修正
[HideInInspector]で非表示にしたプロパティを手動で描画する際のプロパティ描画を修正しました。
Mathematics 1.2.4
追加
Unity.Mathematics のタイプに [Il2CppEagerStaticClassConstruction] を追加し、起動時に静的コンストラクタを実行するようにしました。これにより、静的コンストラクターを持つタイプの IL2CPP パフォーマンスが少し改善されます。
変更
ライセンスファイルを更新し、Unityのパッケージ検証テストに対応しました。
コメント中のノイズドキュメントを xmldoc コメントに変更しました。
修正
Equals(object)のオーバーライドで、キャスト前に型チェックをしていなかったのを修正。これにより、オブジェクトが期待される型と一致しない場合に例外がスローされる可能性がありました。
math.tzcntのドキュメントで、末尾のゼロカウントではなく、先頭のゼロカウントに言及していた不正確な記述を修正しました。
float2x2.Rotateのドキュメントで、度数ではなくラジアンについて言及していたのを修正しました。
以前はドキュメントされていなかったメソッドとプロパティのドキュメントを修正しました。
この記事が気に入ったらサポートをしてみませんか?