エフアンダーバー

個人開発の記録

【Unity】 ECS CHANGELOG [0.2.0]-[0.8.0] 和訳メモ

ECSのまとめ記事の更新をしようとCHANGELOGを翻訳したのだけど、 それだけで疲れたので更新は先送りにしてとりあえずこれだけ公開。 半年サボった代償は大きい……。

いくつか意味がとれない文があったりと翻訳の質が少しアレですが、 元々自分用のメモだったものなのでその辺はご容赦ください。

変更に関する所感としては、魔法の仕組みを作りたがるUnityの悪い癖が出てきたなぁ、という感じです。 確かにコードの外観はかなりシンプルになったのですが、裏で何が起こっているのか理解するのがとても困難で、 テンプレから少し外れたコードを書いた時に予想外の動作をしてハマりそうな気がしてます。 個人的には好みじゃないんですが、世間的にはどうなんだろう……。

[0.2.0] - 2019-11-22

このバージョンは Unity 2019.3 0b11+ が必要

新機能

  • ILポストプロセスによりIComponentDataに対して自動的にオーサリングコンポーネントを生成するように。GenerateAuthoringComponent属性でマークされたコンポーネントデータはConvertメソッドを持つ専用のオーサリングMonoBehaviourを生成する。
  • BuildSettingsアセットによりディスク上にひとつのビルドレシピアセットを定義できるように。これによりC#コードからモジュール単位でビルドパイプラインのフルコントロールが可能に。
    • BuildSettingsはビルトインあるいはカスタムIBuildSettingsComponentsによる完全な構成が可能。
    • BuildPipelinesはIBuildStepによって実行内容と順序を厳密に定義する。
    • IBuildStepにはビルトインのものとカスタムビルドステップがある。
    • BuildSettingsファイルは継承が可能なため多くの構成が完了した基本ビルド設定を容易に作成でき、ビルド設定ごとに細かい調整をすることが可能。
    • 現在多くのプレイヤー設定は未だ既存のPlayerSettingsにあるが、計画では徐々にすべてのプレイヤー設定をBuildSettingsによって公開し、多くのビルドレシピやアーティファクトをもつ複雑なプロジェクトの構成を容易にする。
  • サブシーンが自動的にエンティティバイナリファイルに変換され、アセットパイプラインにキャッシュされるように。以前プロジェクト内に存在していたエンティティキャッシュファイルは削除すべき。変換システムはその振る舞いが変わった際に再変換を要求するためにConverterVersion属性を利用できるように。変換は別のプロセスによって非同期的に実行。そのため、初めてサブシーンを開いた際には即座に表示されない場合がある。

  • LiveLinkビルドは新しいBuildSettingsパイプラインによってビルドされるように。サブシーンを開いてLiveLinkビルドパイプラインを割り当てることにより、

    • 閉じているエンティティシーンはアセットパイプラインによってビルドされ、必要に応じてLiveLinkによってロードされる。
    • 開いているエンティティシーンは変更内容に応じてコンポーネントやエンティティごとのパッチとともにライブエンティティパッチャに送られる。
    • エンティティシーンに参照されているアセットは保存時にLiveLinkによって転送される。
    • GameObjectとしてロードされたシーンは現在はLiveLinkされていない(作業中)
  • (追加のIJobForEachを提供することなく)JobComponentSystemOnUpdateメソッド内に直接ラムダ式を記述することによってジョブ化されたコードを提供するEntities.ForEachの構文。

  • EntityQueryMaskが追加され、エンティティがフィルタなしでEntityQueryによって返されるかどうかをEntityQueryMask.Matches(Entity entity)によって手早く確かめられるように。EntityQueryMaskはEntityManager.GetEntityQueryMask(EntityQuery query)の呼び出しによって取得できる。

  • Fast Enter playmodeに対応し、プロジェクト設定から有効化できるように。すべてのDOTSプロジェクトで有効化推奨。
  • UnityEngineのコンポーネントStopConvertToEntityによってConvertToEntityの再帰に割り込めるように。この目的では"convert and inject"が設定されたConvertToEntityが推奨される。
  • EntityDebuggerが独立したカラムにIDを表示するようになり、エンティティがカスタム名を持つ場合でも依然として確認できるように。
  • エンティティインスペクタ内のエンティティ参照に"Show"ボタンが表示され、参照されているエンティティをデバッガ内で選択できるように。
  • ArchetypeChunkIteratorEntityQueryGetArchetypeChunkIterator呼び出しによって作成できるように。ArchetypeChunkIteratorIJobChunk.RunWithoutJobs()に渡すことでJobs APIを迂回してIJobChunkを実行できる。
  • [AlwaysSynchronizeSystem]属性が追加され、JobComponentSystemに適用することで更新前にすべての依存対象を強制的に同期できるように。
  • BoneIndexOffsetが追加され、アニメーションシステムがボーンインデックスのオフセットをハイブリッドレンダラに伝えられるように。
  • ハイブリッドコンポーネントを使用した変換のサポートの開始。StressTestsフォルダ内のHybridComponentサンプルを見よ。
  • 新しいGameObjectConversionSystem.ForkSettings()により現在の変換設定に別の"EntityGuid namespace"を適用したフォークを作成する非常に特殊化されたメソッドを提供し、ネストされた変換に使用できるように。これは変換先ワールドに同じオーサリングオブジェクトのルートレベルのバリアントを複数生成する必要があるnet codeのような例で役に立つ。
  • EntityManagerLockChunkOrderUnlockChunkOrderが非推奨に。
  • SceneSystem.LoadParameters内のSceneLoadFlags.BlockOnStreamInによって、エンティティシーンが同期的に(次のストリーミングシステムの更新中に)ロードできるように。
  • EntityCommandBufferExclusiveEntityTransactionでもEntityManager同様に再生できるように。これによりジョブからでもECBの再生が可能に(再生中のEntityManagerへの排他的アクセスは依然として必要)。

アップグレードガイド

  • サブシーンを使用している場合には新しいBuildSettingsアセットをビルドと実行に使用する必要がある。サブシーンは File -> BuildSettings... や File -> Build and Run のワークフローには対応しない。
  • ある新機能にAssetDatabase V2が必要で、AssetDatabase V1には対応しない。

修正

  • ComponentSystemGroup.Enabledfalseを設定した際にOnStopRunning()をグループのみでなく、グループメンバーのシステムに対して再帰的に呼び出すように。
  • Propertiesパッケージを0.10.3-previewに更新し、Physicsコンポーネントデータをインスペクタに表示した際の例外とジェネリックな仮想関数呼び出しに対するIL2CPPのAhead of Timeリンカのエラーを修正。
  • LocalToParentSystemWriteGroup(typeof(LocalToWorld))なコンポーネントを持つエンティティのLocalToWorldに書き込まないように。
  • Proテーマにおけるエンティティデバッガのスタイルを改善。
  • エンティティインスペクタにおけるおかしなインデントの修正。
  • AddSharedComponentData, SetSharedComponentDataSharedComponentOrderVersionを更新しないことがある問題の修正。
  • 配列型やUnityEngine.Object参照を含むマネージドIComponentDataを読む際のシリアライズの問題を修正。
  • EntityQueryに対してタグコンポーネントを再追加した際に例外を投げないように。
  • AddComponent<T>(NativeArray<Entity>)が対象エンティティのいずれかが不正な場合に、正しくArgumentExceptionを投げるように。
  • 編集モードでエンティティデバッガが再描画されない問題の修正。
  • [UpdateInGroup(typeof(LateSimulationSystemGroup))]でマークされたシステムに対して[DisableAutoCreation]に関する警告を出さないように。
  • HDRPに対応するようにチャンク情報のレンダリングを修正。
  • マネージドコンポーネント型に対するEntityQueryにおいてToComponentDataArrayがフィルタ設定を無視する問題の修正。

変更

  • DynamicBuffer.Reserveを非推奨としてDynamicBuffer.Capacityを設定可能に。DynamicBuffer.Reserve(10)DynamicBuffer.Capacity = 10となる。
  • NativeStringをUnity.EntitiesからUnity.Collectionsへ移動。
  • パッケージの依存対象を更新。
  • エディタ内での実行におけるEntityのインスタンス化パフォーマンスを劇的に改善。
  • class MyComponent : IComponentData {}のようなマネージドなIComponentDataに対応し、コンポーネント内にGameObjectsやList<>のようなマネージド型を格納できるように。マネージドコンポーネントはジョブシステムやアーキタイプチャンクストレージが使用できず非常に動作速度が遅いため、これらはプロダクションコードでは控えめに使用すべき。マネージドコンポーネントの使用、用途、対策についての詳細はドキュメントのcomponent dataを参照。
  • 'SubSceneStreamingSystem'はSceneSectionStreamingSystemにリネームされinternalに。
  • SubScene.cs_SceneEntitiesが非推奨に。代わりにSceneSystem.LoadAsync/UnloadをそれぞれのSceneGUIDについて使用するように。
  • com.unity.serialization0.6.3-previewに更新。
  • 非推奨のGetComponentGroup()APIがprotectedとなり、後継のGetEntityQuery()などシステム内部からのみ呼び出されるように。
  • "Convert and Destroy"の設定されたConvertToEntityの付いたすべてのGameObjectが同一の変換パスによって処理されるようになり、相互参照が可能に。
  • 重複するコンポーネントの追加が常に無視されるように。
  • EntityQueryによって単一のエンティティにコンポーネントが追加された場合、チャンクのアーキタイプを変更するのではなく一致するチャンクへとエンティティを移動するように。
  • "Used by Systems"リストがフィルタの付いたクエリをスキップするように。
  • マネージドIComponentDataがデフォルト生成後にすべてのフィールドがnullでない状態でなくてもよいように。
  • ISharedComponentDataはエンティティやマネージドIComponentDataとともにシリアライズされる。共有コンポーネントがUnityEngine.Object型を参照している場合には、その型は"objrefs"リソースアセットに別々にシリアライズされる。
  • EntityManagerはコンポーネントのAdd/RemoveのためにBurstデリゲートを介してEntityComponentStoreを呼び出す。
  • EntityComponentStoreが例外を投げることはない(メインスレッドからBurstデリゲートとして呼ばれるため)
  • bool ICustomBootstrap.Initialize(string defaultWorldName)は非推奨のフォールバックなしにAPIが変更された。trueを返すことによってシンプルにデフォルトワールドの初期化を完全に置き換える機会を与えるものに。
  • ICustomBootstrapDefaultWorldInitializationはこのように構成可能に。
class MyCustomBootStrap : ICustomBootstrap
{
    public bool Initialize(string defaultWorldName)
    {
        Debug.Log("Executing bootstrap");
        var world = new World("Custom world");
        World.DefaultGameObjectInjectionWorld = world;
        var systems = DefaultWorldInitialization.GetAllSystems(WorldSystemFilterFlags.Default);

        DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(world, systems);
        ScriptBehaviourUpdateOrder.UpdatePlayerLoop(world);
        return true;
    }
}
  • ICustomBootstrapが継承可能となり、最も深いサブクラスのブートストラップが実行されるように。
  • DefaultWorldInitialization.GetAllSystemsはブートストラップの影響を受けず、シンプルに現在のdllや属性に基づいたシステムのリストを返す。
  • Timeがワールドごとに使用可能となり、ComponentSystemのプロパティに。ワールドごとにInitializationSystemGroup内でUnityEngine.Timeに基づいて更新される。InitializationSystemGroup内で動作するシステムにおいて時間にアクセスする場合には、必ずそのシステムがUpdateWorldTimeSystemよりも後にスケジュールされるようにする。またTimeTimeData構造体による制限も受ける。UnityEngine.Timeで利用可能な拡張フィールドへのアクセスが必要な場合には明示的にUnityEngine.Timeへとアクセスする。
  • OnUpdate内で例外を投げたシステムがComponentSystemGroupから削除されないように。この振る舞いは便利というよりも混乱を招くものだった。
  • マネージドIComponentDataがIEquatable<>の実装とGetHashCode()のオーバーライドをしなくてもよいように。提供されている方が好ましいが、そうでなければコンポーネントは一般的な等値性を検査される。
  • EntityGuidが元のID、名前空間ID、シリアルから生成されるようになり、新しいゲッタを用いてパックされた形式からこれらを安全に抽出できるように。不透明な構造体としてこれを扱いたい場合にはabフィールドを使用する(まだ未使用のビットが残っているためパック方法は将来変更される可能性がある)。a/bコンストラクタは曖昧さ回避のため削除された。
  • com.unity.platforms0.1.6-previewに更新。
  • デフォルトのAPI互換性レベルを.NET Standard 2.0とし、.NET 4.xを使用するプロジェクトで警告をだすように。
  • [UnityEngine.ExecuteAlways]LateSimulationSystemGroupに追加し、システムが編集モードでも動作するように。

[0.3.0] - 2019-12-03

新機能

  • ENABLE_SIMPLE_SYSTEM_DEPENDENCIESによって自動的な依存チェーンをより単純な戦略で置き換えることができるように。ENABLE_SIMPLE_SYSTEM_DEPENDENCIES有効時には前のジョブに対してシステムの順序によって単純にジョブをチェーンする。ENABLE_SIMPLE_SYSTEM_DEPENDENCIES無効時には、それぞれのシステムにおけるコンポーネントデータへのread/writeアクセスに基づいて自動的に依存がチェーンされる。ゲームコードが非常に少ないコアを持つ場合や多くのシステムを持つ場合には、最適な依存を計算するオーバーヘッドを減らせるためこの方法によってパフォーマンスが改善する。
  • MultiListEnumerator<T>DebuggerTypeProxyを追加(e.g.これによりGameObjectConversionSystem.GetEntities呼び出しの結果がデバッガで読めるように)。
  • 二つの新しいメソッドをパブリックAPIに追加:
    • EntityManager.CreateEntity(Archetype type, int count, Allocator allocator);
    • EntityManager.Instantiate(Entity entity, int count, Allocator allocator);
    • どちらのメソッドもNativeArray<Entity>を返す。

変更

0.1.1-previewで/より前でアナウンスした次の非推奨APIを削除:

  • GameObjectConversionUtility.cs: ConvertIncrementalInitialize(), ConvertScene()
  • Translation.cs: struct Position
  • EditorEntityScenes.cs: WriteEntityScene()
  • GameObjectConversionSystem.cs: AddReferencedPrefab(), AddDependency(), AddLinkedEntityGroup(), DstWorld
  • DefaultWorld.cs: class EndPresentationEntityCommandBufferSystem

修正

  • ConvertAndInjectがルートGameObjectを破棄しないように(0.2.0で混入したバグの回帰的修正)。
  • 新しいビルドパイプライン使用時のAndroid/iOSビルドの修正
    • Android向けにビルドした際のプロジェクトエクスポートに対して、正しいアプリケーション拡張apk、aabを提供するあるいは出力しないように。

[0.4.0] - 2019-12-16

このバージョンは Unity 2019.3.0f1+ が必要

新機能

  • 二つの新しいメソッドをパブリックAPIに追加:
    • void EntityCommandBuffer.AddComponent<T>(EntityQuery entityQuery)
    • void EntityCommandBuffer.RemoveComponent<T>(EntityQuery entityQuery)
  • BlobArray, BlobString, BlobPtr はメモリ位置からの相対的なオフセットポインタを持つため値としてコピーすることはできない。これはプログラミング上のミスを容易に引き起こす。[MayOnlyLiveInBlobStorage]属性の付いた型が値としてコピーすることができないようにすることでコンパイラが正しくない使用法を阻止するように。

変更

  • TypeManager.CreateTypeIndexForComponentとそのコンポーネントタイプの亜種を非推奨に。型はTypeManager.AddNewComponentTypesに未登録の型を渡す代わりに、(エディタビルド内で)動的に追加ができるように。
  • [AlwaysUpdate]の付いたシステムにおけるRequireForUpdate(EntityQuery)RequireSingletonForUpdateが無視されるのではなく例外を投げるように。
  • ChangeVersionUtility.IncrementGlobalSystemVersionとChangeVersionUtility.InitialGlobalSystemVersionがinternalに。これらは以前は誤ってpublicになっていた。
  • エンティティインスペクタがエンティティの名前を表示し、選択したエンティティのリネームができるように。
  • エンティティデバッガのUIを改善。
  • 変換時にレンダラを持つプレハブおよび無効化されたエンティティに対してWorldRenderBoundsを生成するようになり、これによってそれらのエンティティのインスタンス化が劇的に速くなった。
  • System.Update/OnUpdateメソッドのスタックの深さを減らした(そのためデバッガで見やすくなった)。
  • 他のワールドのEntityQueryでないか確認するように。
  • あるワールドでつくられたEntityQueryを別のワールドで使用するとメモリ破壊を起こしていた。これらをEntityManager APIによって検出して引数例外を投げるように。
  • 構造的変化がBurstによるコードパスによって実行されるようになり劇的に速くなった。
  • DynamicBuffer.Capacityが設定可能に。

修正

  • 参照されたGameObjectがシーンオブジェクトの場合のDeclareReferencedPrefabにおける不要で間違った警告を削除。
  • ConvertAndInjectされたGameObjectsが変換されていない親からデタッチされないように(回帰的修正)
  • 空のLinkedEntityGroupの付いたエンティティの削除時にクラッシュすることがある問題の修正。
  • performanceパッケージを1.3.2に更新し、旧機能に対する警告を修正。
  • EntityCommandBufferが繰り返し再生できるように。
  • 共有コンポーネントからnullのUnityEngine.Objectを参照している場合にシーンのバイナリシリアライズ中のエンティティで例外が発生する問題の修正。
  • LiveLinkに必要な場合に、アセンブリ間のスクリプトの移動によりアセットバンドルのリビルドが発生するように。
  • AndroidにおけるLiveLinkの修正。

[0.5.0] - 2020-01-16

追加

  • AndroidHybrid.buildpipelineをRunStepAndroidとともに追加。

変更

  • Entities.WithReadOnly, Entities.WithNativeDisableParallelForRestriction, Entities.WithDeallocateOnJobCompletion, Entities.WithNativeDisableSafetyRestriction, Entities.WithNativeDisableUnsafePtrRestrictionにおいて、コンパイル時に引数型の適切な属性([NativeContainer], [NativeContainerSupportsDeallocateOnJobCompletion])を確認し、ユーザ定義型のフィールド上で使用されていた場合にエラーを投げるように。
  • サブシーン変換中にコンテキストオブジェクトなしに出力されたログエントリを破棄せずにサブシーンインスペクタ上に表示するように。

非推奨

  • 非推奨とされているが期限の設定されていないAPIに対して削除期限を追加。
  • BlobAssetReference<T>: Release()を非推奨とし、代わりにDispose()を使用するように。

削除

  • 非推奨とされているが期限の設定されていないAPIに対して削除期限を追加。
  • BlobAssetReference<T>: Release()を非推奨とし、代わりにDispose()を使用するように。
  • EntityQuery.cs: 期限切れのAPICalculateLength(), SetFilter(), SetFilterChanged()の削除。

修正

  • マネージドコンポーネントに対してエンティティリマッピングをしようとした際にコンポーネントフィールドがnullだと例外を投げる問題を修正。
  • クエリによるEntityManager.MoveEntitiesFromが共有コンポーネントバージョン、順序バージョン、ダーティバージョンを正しく上げていなかった。今は正しく動作する。
  • Add Componentsドロップダウンから追加したサブシーンコンポーネントがヒエラルキービューに反映されない問題の修正。
  • サブシーンインスペクタにおけるシーンアセットobjectfieldの変更のUndo/Redoがヒエラルキービューに反映されない問題の修正。
  • サブシーンの複製が存在する場合を明確にした: ヒエラルキーに表示し、インスペクタに警告ボックスを表示。
  • コンテキストメニューの'Create Sub Scene From Selection'がUndoに対応。
  • コンテキストメニューの'New Sub Scene From Selection'に対するよりよいファイル名エラーへの対処。
  • 'New Sub Scene From Selection'によって生成された新規サブシーンの兄弟間の順序を保持(新規サブシーンが最後の兄弟要素とならないように)。
  • 選択対象からサブシーンを生成する際に、プレハブインスタンスの一部が選択されていた場合に対応。
  • サブシーンコンポーネント内のシーンアセット参照を削除した際に、ヒエラルキーに可視化されないロード済みのサブシーンが残る問題の修正。
  • Entities.ForEachにて二つの別々のスコープにある構造体がローカル変数としてキャプチャされてそのフィールドにアクセスされる場合に正しくないILが生成される問題の修正。
  • ヒエラルキーとサブシーンインスペクタにてネストされたサブシーンがまだサポートされていないことを明確に。
  • BinaryWriterで要素がひとつしか存在しないSystem.String[]をシリアライズした際に例外を投げることがある問題の修正。
  • ComponentSystem.GetEntityQueryJobComponentSystem.GetEntityQueryにて、"None"や"Any"フィールドを使用したクエリに対して誤ったキャッシュをしてしまう問題の修正。

[0.5.1] - 2020-01-28

変更

  • World.CreateSystem中のコンストラクタに関連した例外が内部例外の詳細を含むように。
  • DefaultWorldInitialization.GetAllSystemsList<Type>ではなくIReadOnlyList<Type>を返すように。
  • DefaultWorldInitialization.AddSystemsToRootLevelSystemGroupsList<Type>ではなくIEnumerable<Type>を要求するように。

修正

  • BlobAssetReference型が全てのプラットフォームにおいて8バイト境界である保証がないために、32ビットプラットフォームにおいてコンポーネントのBlobデータが正しく読み込めない問題の修正。
  • MinMaxAABB.Equals()にてMinを自身ではなくotherと比較する問題の修正。
  • Entities.ForEachDynamicBuffer型のinパラメータを読み込み専用として正しく扱うように。
  • IJobChunk.Scheduleの呼び出し中に発生した例外後にジョブのリークに起因するクラッシュが発生する可能性がある問題の修正。
  • ComponentSystemBase.GetSingleton()において関数が呼ばれる度に新しいクエリが生成される問題の回帰的修正。

[0.6.0] - 2020-02-17

追加

  • [GenerateAuthoringComponent]属性がIBufferElementDataを実装した構造体に付けられるように。エンティティにIBufferElementDataを実装した型のDynamicBufferに追加することのできるオーサリングコンポーネントが自動生成される。
  • コンポーネントシステムとして新しいSystemBase基底クラスを追加。この新しいコンポーネントシステムの定義方法は依存を管理する(手動での依存管理はSystemBase.Dependencyフィールドに直接アクセスすることで依然として可能)。
  • IJobChunkと(SystemBaseの)Entities.ForEachにジョブの並列スケジューリングを明示的に行うScheduleParallelを追加。IJobChunkScheduleSingleは非並列にスケジューリングが行われることを示す。
  • BuildConfigurationAPIによって、素早く簡単にLiveLinkプレイヤーをビルドできるエディタワークフローを導入。
  • LiveLinkがGameObjectシーンに対応。
  • SceneSystemAPIがLoadSceneAsyncAPIによってGameObjectシーンもロードするように。
  • Unity.Scenes.Editor内のLiveLink設定に新しいビルドコンポーネントを追加し、初期シーンをどのように扱うか制御できるように(LiveLink all, embed all, embed first)。
  • ポストプロセス後のILコードをUnityエディタ内で確認できるように: DOTS -> DOTS Compiler -> Open Inspector
  • GetAssignableComponentTypes()がList<Type>ありでもなしでもデータの収集のため呼び出せるように。省略時にはリストが確保され、以前と同様の振る舞いとなる。

変更

  • com.unity.buildパッケージがcom.unity.platformsパッケージへと統合された。そのため、com.unity.build@0.1.0-previewへの依存を削除し、com.unity.platforms@0.2.1-preview.1へと置き換えた。詳細はcom.unity.platformsの変更履歴を参照。
  • エンティティのアーキタイプが変化した際のGCアロケーションが少なくなるような方法でマネージドコンポーネントが記憶されるように。
  • Unity.Entities.ICustomBootstrapをUnity.Entities.HybridからUnity.Entitiesへと移動。
  • World.Dispose()がリソース解放前にWorldEntityManager下の全てのreader/writerジョブの完了を待つようになり、解放後使用のエラーを回避するように。
  • 静的イニシャライザやInitializeOnLoad内にてBurstを使用するパッケージに依存するプロジェクトを読み込む際のAssemblyResolveExceptionの修正。
  • Assets/SceneDependencyCache内の.sceneWithBuildSettingsファイルが絶えずリビルドされないように。これらはエディタ内におけるサブシーンの動作に必要なため、削除された際に編集中シーンのサブシーンのOnValidateによって再生成される。またドメインのリロード(Unityの再起動、プレイモードへの移行/離脱、その他)によっても再生成されるべきである。
  • EntityQuery.cs: CreateArchetypeChunkArray, ToComponentDataArray, ToEntityArray, CopyFromComponentDataArrayのJobHandleを返すオーバーロード(非同期に完了することが可能)がAsyncの追加された名前にリネーム(i.e. ToComponentDataArrayAsync)。旧いオーバーロードは非推奨となり、APIアップデータの節を追加。
  • Entities.WithNameが文字、数字、アンダースコアを使用する名前(数字から始まらない、連続する二つのアンダースコアを含まない)のみを受け入れるように。
  • com.unity.propertiesパッケージをバージョン0.10.4-previewに更新。
  • com.unity.serializationパッケージをバージョン0.6.4-previewに更新。
  • エンティティデバッガがチャンク情報パネルの可視性を記憶するように。
  • エンティティデバッガがシステムリストのネストした型の完全な名前を表示するように。
  • エンティティデバッガが直前に使用したフィルタコンポーネントがフィルタGUIのトップとなるようソートするように。
  • Burstのバージョンを上げたことにより、新機能が増え、次を含む修正がなされた。
  • ドメインのリロード後に関数ポインタが壊れてクラッシュを引き起こす問題を修正。
  • データベースのビルド時にBurstが使用された際、BurstとAssetDatabaseがデッドロックを引き起こす可能性がある問題を修正。

非推奨

  • GameObjectConversionSystemGetBuildSettingsComponentGetBuildConfigurationComponentにリネーム。
  • GameObjectConversionSystemTryGetBuildSettingsComponentTryGetBuildConfigurationComponentにリネーム。
  • GameObjectConversionSettingsBuildSettingsBuildConfigurationにリネーム。
  • SceneSystemBuildSettingsGUIDBuildConfigurationGUIDにリネーム。

削除

  • 期限切れのAPIの削除 SceneSectionData.SharedComponentCount
  • 期限切れのAPIの削除 struct SceneData
  • 期限切れのAPIの削除 SubScene._SceneEntities
  • 期限切れのAPIの削除 World.Active

修正

  • (インスペクタウィンドウへとカーソルを動かすことなく)シーン階層ウィンドウからサブシーンを開閉できる機能。
  • GameObjectを生成することなく空のサブシーンを生成できる機能。
  • サブシーンの読み込みとエディタ上の変更追跡のパフォーマンスを改善。
  • GetSingletonが呼び出しの度にクエリを生成するようになっていた問題の回帰的修正。
  • 同じプレイヤー上かつ別々のワールドから複数回ロードされた場合に、すでにロードされているAssetBundleをサブシーンがロードしようとする問題の修正。
  • プレハブ内のサブシーンがサポートされていないことを明確に。
  • エラーメッセージが期待する内容を含まない場合にラムダ式によるジョブコード生成のテストが失敗するように。
  • GameObject変換に必要なワールドの準備におけるパフォーマンスを改善。
  • IJobChunk.Execute()に渡されるchunkIndexパラメータの値が正しくなるように。
  • ISystemStateSharedComponentDataコンポーネントの付いたエンティティが正しく破棄されなくなるエラーの修正。
  • Entityを含むマネージドコンポーネントが正しくシリアライズされるように。
  • 型を解決できない場合にBlobAssetVerifierがエラーを投げる問題の修正。
  • EntityQueryのためのマネージドコンポーネント拡張の公開。
  • Entities.ForEachにて、ラムダ式がメンバ関数として出力されてコンパイルが失敗した際、拡張メソッドの呼び出しによる外側のシステムのthisのキャプチャを認識するように。
  • Entities.ForEachにて、ラムダ式がメンバ関数として出力されてコンパイルが失敗した際、外側のシステムのフィールドがキャプチャされて参照として使用されていることを報告するように。
  • Entities.ForEachにて、ラムダ式がメンバ関数として出力されてコンパイルが失敗した際、静的関数の呼び出しを誤ってエラーの原因と指摘しないように。
  • Visual Studio 2017/2019によるEntities.ForEachの内部のデバッグ(いくつかのデバッグ機能にはcom.unity.ide.visualstudioパッケージの今後の更新が必要)。
  • UnityEngine.Componentを継承するTに対するEntityQuery.ToComponentArray<T>が正しくチャンク内のすべてのデータを集めるように。
  • EntityQueryDescによるComponentSystemBase.GetEntityQuery EntityManager.CreateEntityQueryの呼び出しが読み込み専用の許可を考慮しない問題の修正。

[0.7.0] - 2020-03-03

追加

  • エンティティを介したコンポーネントへの容易なアクセスを提供するHasComponent/GetComponent/SetComponentSystemBaseクラスに追加。これらのメソッドはOnUpdate内ではEntityManagerによる呼び出しを行い、Entities.ForEach内ではComponentDataFromEntityを介したコード生成によるアクセスを行う。
  • SubSceneがハイブリッドコンポーネントに対応し、エディタLiveLinkが可能になった(プレイヤーLiveLinkは未対応)。
  • 変換時に含めるべきシステムを明示的に指定するGameObjectConversionSettings.Systemsを追加。

変更

  • デシリアライズされたワールド使用時、共有コンポーネントを手動で設定/追加するまで、共有コンポーネントフィルタが正しく動作しない問題の修正。
  • 更新時のコールバックによりComponentSystemGroup更新時の振る舞いが制御できるように。ComponentSystemGroup.UpdateCallbackのドキュメントやFixedRateUtilsの例を見よ。
  • マネージドコンポーネントがIDisposableICloneableに対応。
  • エディタ上の様々なツールウィンドウ上にて表示すべきワールドの選定に利用するため、WorldFlagsフィールドを公開。
  • World.Systemsが読み込み専用のコレクションとなり、列挙時にマネージドメモリの確保をしなくなった。
  • com.unity.platformsのバージョンを0.2.1-preview.4に更新。

非推奨

  • World.AllWorldsプロパティはWorld.Allで置き換えられ、読み込み専用コレクションとなることで、列挙時にマネージドメモリを確保しなくなった。

削除

  • 期限切れのAPIの削除 implicit operator GameObjectConversionSettings(World)
  • 期限切れのAPIの削除 implicit operator GameObjectConversionSettings(Hash128)
  • 期限切れのAPIの削除 implicit operator GameObjectConversionSettings(UnityEditor.GUID)
  • 期限切れのAPIの削除 TimeData.deltaTime
  • 期限切れのAPIの削除 TimeData.time
  • 期限切れのAPIの削除 TimeData.timeSinceLevelLoad
  • 期限切れのAPIの削除 TimeData.captureFramerate
  • 期限切れのAPIの削除 TimeData.fixedTime
  • 期限切れのAPIの削除 TimeData.frameCount
  • 期限切れのAPIの削除 TimeData.timeScale
  • 期限切れのAPIの削除 TimeData.unscaledTime
  • 期限切れのAPIの削除 TimeData.captureDeltaTime
  • 期限切れのAPIの削除 TimeData.fixedUnscaledTime
  • 期限切れのAPIの削除 TimeData.maximumDeltaTime
  • 期限切れのAPIの削除 TimeData.realtimeSinceStartup
  • 期限切れのAPIの削除 TimeData.renderedFrameCount
  • 期限切れのAPIの削除 TimeData.smoothDeltaTime
  • 期限切れのAPIの削除 TimeData.unscaledDeltaTime
  • 期限切れのAPIの削除 TimeData.fixedUnscaledDeltaTime
  • 期限切れのAPIの削除 TimeData.maximumParticleDeltaTime
  • 期限切れのAPIの削除 TimeData.inFixedTimeStep
  • 期限切れのAPIの削除 ComponentSystemBase.OnCreateManager()
  • 期限切れのAPIの削除 ComponentSystemBase.OnDestroyManager()
  • 期限切れのAPIの削除 ConverterVersionAttribute(int)

修正

  • transform階層の移動していない子によってtransformシステムの更新が引き起こされないように。
  • 動的バッファコンポーネントがLiveLinkの最中にリークを引き起こすことがあるバグの修正。
  • モジュール内に[GenerateAuthoringComponent]によって生成されたメソッドのみの場合にクラッシュする問題の修正。
  • 変数、フィールド、戻り値として得られるデリゲートが使用された場合にEntities.ForEachが正しいエラーメッセージを表示するように。
  • タグコンポーネントやWithStructuralChangesを利用したEntities.ForEachに対するIL2CPPのコンパイルエラーの修正。
  • ラムダ式がBurstコンパイルされかつコレクション検査が有効の際、Entities.ForEachのラムダ式パラメータがDOTSランタイム向けにマーシャリングされるように。以前はEntityCommandBufferDisposeSentinelフィールドを持つ別の型をラムダ関数の一部として使用した場合(DOTSランタイム使用時)、メモリアクセス違反となることがあった。
  • フィルタのあるクエリにおいてIJobChunk.Run()がnullや無効なチャンクを参照することがあった。

セキュリティ

  • 無関係なクエリからToComponentDataArrayAsync CopyFromComponentDataArray CopyFromComponentDataArrayAsyncにアクセスした場合に正しいエラーメッセージを表示するように。

[0.8.0] - 2020-03-13

追加

  • 抜けていた動的コンポーネントのバージョンAPIの追加: ArchetypeChunk.GetComponentVersion(ArchetypeChunkComponentTypeDynamic)
  • 抜けていた動的コンポーネントの存在確認APIの追加: ArchetypeChunk.Has(ArchetypeChunkComponentTypeDynamic)
  • EntityArchetypeがプレハブであるかどうかを公開していなかった。bool型のEntityArchetype.Prefabを追加。メタエンティティクエリはプレハブを除外しないためこれが必要となる。
  • Linuxのためのビルド構成とビルドパイプラインを追加
  • LiveLinkプレイヤーが誤ったエディタに接続しようとした際にエラーを出し、接続方法をユーザにアドバイスするように。

変更

  • ArchetypeChunkComponentTypeDynamicのメモリレイアウトを最適化。48->40バイトに。
  • LiveLink: LiveLinkアセットをLiveLinkプレイヤーに送信した際にエディタがフリーズしないように。
  • LiveLink: 単独のアセットに依存するbuiltin_extraのすべてのアセットを含めず、使われているものだけ送るように。これによりプレイヤーへのLiveLinkの初速が大幅に向上。
  • Burstアップグレードにより、多くの不具合を解決しネイティブなデバッグ機能を導入。

非推奨

  • IJobForEachインターフェースを実装する型を非推奨に。これらのジョブにはIJobChunkEntities.ForEachを使用するように。

修正

  • 連番でインデクスされていないサブシーンセクションへのLiveLinkの修正。どんなインデクスを使用しても動くように。
  • 無効化されたゲームオブジェクトをライブ変換した際の警告を修正。
  • 有効なネイティブコンテナを含む型に対するEntities.WithReadOnly, Entities.WithDeallocateOnJobCompletion, Entities.WithNativeDisableContainerSafetyRestriction, Entities.WithNativeDisableParallelForRestrictionの使用を許可。