プログラマー向けの新機能とアップデート
新機能
プログラマー向けツールの重要なアップデートの概要を紹介します。完全な詳細については、リリースノートを参照してください。
DOTS パッケージの新しいバージョンでは、記述する定型コードが少なくてすみます。単純な [GenerateAuthoringComponent] 属性でカスタムオーサリングコンポーネントを置き換え、冗長な IJobForEach および IJobForEachWithEntity コンストラクトを、Burst コンパイラーと C# Job System を使用するようになった単純だが高速な Entities.ForEach() に置き換えます。
新しい方法での DOTS コードの記述を開始するには、パッケージマネージャーから Entities パッケージ(プレビュー)をインストールします。
新しい SerializeReference 属性では、C# クラスを値タイプではなく参照としてシリアル化できます。つまり、POCO(Plain Old C# Objects)で相互参照を行い、グラフやツリーなどの複雑なデータ構造を表現および管理するためのコードを簡略化できます。
フィールドにポリモーフィックデータを含めることもできます。たとえば、List <IAnimal>型のリストには犬 (クラス Dog:iAnimal {}) と猫 (クラス:猫:動物 {})。
シリアル化に対して参照とマークされたフィールドでは、本質的に null 値を表現できるようになりました。以前は、null フィールドをシリアライズすると、その型のデフォルトのコンストラクターを使用して常にデシリアライズされました。
従来、非 Unity 型のシリアル化ではポリモーフィズムが無視されました。Unity 2019.3 では、ポリモーフィックシリアル化により、以前はシリアル化プロセスを逃れなかったオブジェクト参照を維持でき、継承チェーンをより適切に参照できます。
現在、エディターで再生モードに入ると、Unity は、スクリプティング状態のリセット(ドメイン再ロード)とシーンの再ロードの 2 つを行います。これには時間がかかり、プロジェクトが複雑になると、Unity Editor が再生モードに入るのが遅くなることがあります。そこで、「プロジェクト設定」>「エディター」>「再生モードへの切り替え」オプションに、設定可能な再生モードへの切り替え(実験的)を導入しました。
これらのオプションにより、コードの変更がないときは「Enter Play Mode」プロセスからドメインやシーンの再ロードを無効にできます。テスト結果に基づき、これらの設定を変更すると、プロジェクトに応じて反復時間を 50-90% 短縮できます。
ドメイン再ロードを無効にしたときにスクリプトを正しく変更する方法の詳細については、ドキュメント内の再生モードの設定方法に関するページをご確認ください。
再生モードに入る前にゲーム状態をリセットする場合は、API とコールバックを通じてこの機能にアクセスすることもできます。
PhysX ライブラリを v3.4 から v4.1 にアップグレードしました。これには、新しい Temporal Gauss-Seidel ソルバーが含まれます。このソルバーでは、ジョイントのオーバーストレッチに対する耐性が高まり、以前にシミュレーション中に見られた不安定な動作が防止されます。新しいソルバーを有効にするには、[プロジェクト設定] > [物理学] に移動します。
新しいブロードフェーズ Automatic Box Pruning アルゴリズムも公開しました。このアルゴリズムでは、ワールド境界と細分化の量を自動的に計算できます。これは、既存の Multi-Box Pruning アルゴリズムからのアップグレードです。
また、より高速なメッシュミッドフェーズアルゴリズムがデスクトッププラットフォーム上で使用可能になっています。これは多くのリソースを消費する加速構造(R-Trees)の作成を必要とせず、MeshCollider インスタンス化時間が短縮されるため実行時に生成されるコンテンツに役立ちます。
MeshCollider のメッシュの遅延ベイキングを可能にする新しい API も追加しました。ロード待ち画面や、アドベンチャーゲームの会話シーンのような画面遷移シーンの背後で、計算量の大きいメッシュのベイキング処理を行うことができます。この API はスレッドセーフであるため、C# Job System 経由など、メインスレッドから関数を呼び出して一度に複数のメッシュをベイクできます。
詳細については、NVIDIA の PhysX 4.1 SDK ガイドの PhysX SDK 3.4 から 4.0 への移行に関するセクションを参照してください。
2019.3 より前は、「Profiler」ウィンドウを通じてパフォーマンスを調べる場合、一度に 300 フレームからのプロファイルデータを参照できました。これは、本当に必要なフレームを捕捉するのに必ずしも十分な時間ではありませんでした。
設定可能なフレーム数により、そのキャプチャーウィンドウを延長できます。「Preferences」ウィンドウで、「Profiler」ウィンドウに表示するフレーム数(300–2000)を設定できるようになりました。
マネージアロケーションの追跡と分析は、Unity のプロファイラーの重要な機能です。
継続的なマネージアロケーションにより、ガベージコレクション(GC)が開始され、マルチフレーム遅延により滑らかなゲームプレイが妨げられます。アロケーションがいつ行われるかと、コード内でのそれらの起点をを知ることは、Unity でゲームを開発する際に不可欠な情報です。
2019.3 では、プレイヤーにマネージアロケーションのコールスタックを導入しています。これにより、プレイヤーのプロファイリング時に GC アロケーションが発生した C# 関数を確認できます。
このオプションは、コールスタックトグルを使用して有効にすることができます。
Unity 2019.3 では、バージョン管理サポートも刷新されています。
これには、いくつかの UX と統合の改善、および Perforce 接続が失われた場合の自動再接続試行のような Perforce 統合の修正が含まれます。
特に、「Inspector」ウィンドウの上部でバージョン管理バーが使用可能になり、追加、ロック、アンロック、送信などの追加の操作を実行できるようになりました。
また、チェックアウトされていないアセットの「Inspector」では、右クリックして「Inspector」の無効なフィールドの値をコピーできるようになりました。
UI のすべての改善点と修正点の詳細については、リリースノートをご確認ください。
このリリースには、新しい Addressable Asset System(Addressables)が含まれています。これにより、「アドレス」によってアセットを簡単にロードする方法が提供され、コンテンツパックの作成と展開を簡略化することでアセット管理のオーバーヘッドの処理も簡単になります。要するに、Addressables を使用すると、チームは複雑なライブコンテンツを効率的に管理できます。
DOTS サンプルで使用されている FPS Netcode は、DOTS をベースに構築されており、類似するアーキテクチャを持つネットワーク化したゲームを簡単に作成できるようにします。これには、クライアント側の予測、権威サーバー、補間、ラグ補償が含まれます。
FPS NetCode の概要については、Tim Johansson 氏による Unite でのセッションをご覧ください。