Unity 2020.2 のプログラマー向けの主な改善点と新機能の一部を紹介します。完全な詳細については、リリースノートを確認してください。
決定論的コンパイルでコンパイル時間を改善
プロジェクトが複雑になるにつれて、新しいコードの変更はコンパイルに時間がかかり、チームの生産性に影響を及ぼすことがあります。Unity 2020.2 には C# スクリプトをコンパイルするときに「-deterministic」コンパイルオプションが用意されています。このオプションにより、エディターのスクリプトをコンパイルしているときに、アセンブリのパブリックメタデータに変更がない場合に、不要なアセンブリ定義(.asmdef)の参照の再コンパイルを回避します。これは、直接的および間接的な参照が数多く存在するアセンブリに変更を加えているときに、イテレーション時間を短縮するのに特に便利です。
C# 8 のサポート
Unity 2020.2 は、C# 8 の最新機能と改善された機能をすべてサポートします(デフォルトのインターフェースメソッドを除く)。これには null を許容する参照タイプが含まれます。これにより、参照型の変数に null を割り当てようとするたびにコンパイラーで警告が表示されます。パターン一致を備えた switch 式により、より効率的に条件分岐コードを記述できます。
すべての新機能に関する詳しい説明は、C# 8 に関する Microsoft のドキュメントをご覧ください。
アセンブリ定義の設定で Root Namespace が利用可能に
C# の名前空間は、コードを整理する効率的な方法を提供し、クラスの命名に関して他のパッケージやライブラリとの衝突を回避できます。Root Namespace が asmdef インスペクターの新しいフィールドとして利用できるようになり、Unity や Visual Studio と Rider で新しいスクリプトを作成するときに名前空間を自動的に追加するために使用されます。
この機能を使用する予定がある場合は、Visual Studio と Rider のパッケージを更新するのを忘れないでください。

より短時間でのビルドのコンパイル
Unity 2020.2 ではビルドのコンパイル時間が大幅に改善されています。マテリアル、シェーダー、プレハブなど、コードが関与しない変更を加える場合、プレイヤーのビルド中、IL2CPP での .NET アセンブリから C++ への変換は完全にスキップされるようになります。
上記のテストプロジェクトデータが示すように、Unity 2020.2 では、IL2CPP での変換が最新のマルチコアプロセッサーを利用してシングルスレッドからマルチスレッドに移行することで、IL2CPP でのプレイヤーのビルド時間全体が大幅に短縮されています。
一貫性のある Time.deltaTime
Unity 2020.2 では、ゲームプレイ中のオブジェクトの動きのばらつきにつながる、一貫性のない Time.deltaTime の値が修正されます。フレーム時間の計算がより安定するように TimeManager インターフェースがリファクタリングされました。これにより、ゲームが安定したフレームレートで実行されているときに、オブジェクトのはるかに滑らかな動きを実現します。Unity 2020.2 では、iOS、macOS、PS4、Switch、tvOS、UWP、Windows、Xbox One でのこれらの時間安定性の改善がサポートされています。Android、Vulkan 上の Windows/Linux、XR の改善は今後予定されています。詳細については、ブログ記事を確認してください。

パフォーマンスの改善
Unity 2020.2 では、Nested Prefabs に対する最適化を含め、いくつかの重要な最適化がフィーチャーされています。その結果、ソートや検索にかかる時間が大幅に短縮されました。エディターの Scripted Importer 登録関数での検索は、テストから最大で 800 倍高速になることがわかっています。最後に、Unity の最適化チームは Camera.main もリファクタリングしました。これにより、一部のプロジェクトでクエリにかかる時間が数百ミリ秒にまで短縮されました。
Editor Coroutines と設定可能な Enter Play Mode によるより高速なワークフロー
設定可能な Enter Play Mode が実験的な機能でなくなりました。「Domain Reload」アクションと「Scene Reload」アクションのどちらかまたは両方を無効にし、再生モードに入るまでの時間を短縮します。Editor Coroutines がプレビュー版でなくなったことで、MonoBehaviour のスクリプト内のコルーチンが実行時に処理される方法と同じように、エディター内で反復子のメソッドの実行を開始できます。
Unity Linker によるマネージドコードのストリッピング
Unity Linker はストリップマネージドコードに対して静的な分析を実行します。また、数多くの属性を認識し、依存関係を特定できなかった場所に注釈を付けることができます。Unity 2020.2 では、ツールの API が Mono IL Linker と一致するよう更新されています。Unity 2020.1 より、Unity Linker でいくつかの単純なリフレクションパターンを検出できるようになり、link.xml ファイルを使用する必要性が少なくなります。
プロファイラーの更新
プロファイラーウィンドウにグラフを追加して、既存またはユーザーが生成したプロファイラーの統計のパフォーマンスに関する分析情報やコンテキストを取得できるようになりました。同時に、フローイベントにプロファイラー Timeline 内のシリアルタスクの依存関係を表示することで、アプリケーションが処理シーケンスの中のどのタスクに時間をかけているのかを特定するのを支援します。
プレイヤーでレンダリングやメモリプロファイラーの統計を視覚化できるようになりました。ランタイム API を使用してプロファイラーの既存の統計を表示し、プレイヤーのメモリ、レンダリングなどの既存のプロファイラー領域のパフォーマンスに関する統計の値を読み取ります。そのデータを使用して、プロジェクトをターゲットデバイスで実行している間にパフォーマンスをヘッドアップディスプレイ(HUD)に表示するか、自身のニーズに合わせてその他のパフォーマンスツールをビルドします。
Roslyn アナライザーの改善
コンパイルパイプラインで Roslyn アナライザーがサポートされるようになりました。これにより、イテレーションワークフローを中断することなく、Unity エディター内部で C# コードアナライザーを背景で非同期的に実行できます。また、コマンドラインから同期的に実行することもできます。
Unity プロジェクト内の Roslyn アナライザーとルールセットファイルは、コードのスタイル、品質、その他の問題を調査するのに役立つ強力なツールです。アナライザーの既存のライブラリを使用してコードを調査し、独自のアナライザーを記述して組織内のベストプラクティスや規則を促進できます。
Unity セーフモード
Unity セーフモードにより、スクリプトにコンパイルエラーがあるプロジェクトを開いているときの Unity の挙動が改善されます。エディターの起動時にコンパイルエラーが検出された場合、セーフモードに入るようプロンプトが表示されるようになります。これにより、それらを解決するために設計された環境が表示されるため、不要なプロジェクトのアセットがインポートされるのを待つことなく、プロジェクトを機能する状態に迅速に戻すことができます。この機能により、プロジェクトを新しいバージョンの Unity にアップグレードするプロセスが簡素化されてスピードアップし、ライブラリのフォルダーに正しくないインポートアーティファクトが含まれるケースを減らすことで、大規模なプロジェクトに取り組んでいるチームを支援します。