March 31, 2019

Unreal Engine 4.22 がリリースされました!

作成 Jeff Wilson

新機能

Unreal Engine 4.22 は、没入感あふれる魅力的なゲームの制作、テレビの生放送、画期的な製品の視覚化、または次の超大作映画の制作など、リアルタイム環境におけるフォトリアリズムの限界を押し広げます。著しく進歩した技術を利用することで開発時間が伸びる結果になってしまう、となる必要はないと考えています。そのため、再び 全ての分野のユーザーのワークフローをより速く、よりアクセスしやすくすることを目指しました。

Unreal Engine は、Nvidia RTX グラフィックスカードでのリアルタイム レイトレーシングのおかげで、動的なグローバル イルミネーション、ピクセルの完璧な反射、物理的に正確な屈折など、最も正確なリアルタイムのライティングとシャドウイング エフェクトで、リアルティあふれるワールドを作り上げることができます。ソフトなエリアシャドウとアンビエントオクルージョンで、シーンを現実的にしっかりとなじませるための最後の仕上げが可能です。

Unreal Engine の膨大なバーチャル プロダクション機能により、複雑なライブ パフォーマンスをキャプチャして記録し、それらをリアルタイムで合成することができます。新しいマルチ ユーザー編集機能を使用すると、チーム全体が連携して直接シーンでの調整と作業ができます。

作品が命を吹き込まれて動きだすのを待つまでの一秒一秒は、常にコストになります。自分のコスト、ユーザーにとってのコスト、自分のアイデア実現のためのコストです。そのため、Unreal Engine はリリースごとにアプリケーションの隅々に至るまで、 より簡単かつ迅速に実行できるように 努めています。そうすることで、ユーザーのエクスペリエンス向上のための微調整により時間をかけることができるようになります。ライブ コーディングとして、Unreal Engine で Live++ がサポートされるようになりました。そのため、 プロジェクト実行中に自分のアイデアをすぐに試すことができます。ビルド時間が全体的に最適化され、 インクリメンタル ビルドのイテレーション時間は最大 3 倍速くなり、パイプラインの貴重なリソースが開放されるようになりました。

今回のリリースには、GitHub の Unreal Engine の素晴らしいデベロッパー コミュニティから 174 の改善点が寄せられました。Unreal Engine 4.22 に貢献いただいた以下の皆様に謝意を表します (以下、敬称略) 。

0xmono, Adam Moss (adamnv), Ahsan Muzaheed (muzaheed57), Alessio Sgarro (cmp-), Alexander Stevens (MilkyEngineer), AlexTimeFire, AlSafty, Andrzej K. Haczewski (ahaczewski), Anton Rassadin (Antonrr), Ben Peck (bpeck), BinaryRK, Branislav Grujic (grujicbr), Cameron Angus (kamrann), Cengiz Terzibas (yaakuro), Chris Conway (Koderz), Chris Gallegos (Chrispykins), Clinton Freeman (freemancw), Cristiano Carvalheiro (ccarvalheiro), Dan Ogles (dogles), Daniele Benegiamo (kafumanto), David Aylaian (davidaylaian), David Nadaski (GlassBeaver), David Sauve (notanumber), Deep Silver Dambuster Studios (DSDambuster), Dmitriy Donskoy (sentik), doodoori2, Dorgon Chang (dorgonman), Doug Moscrop (dougmoscrop), Doug Richardson (drichardson), Dzuelu, Erik Dubbelboer (erikdubbelboer), H1X4Dev, Hargreawe, hkozachkov2, Ilyin Aleksey (IlinAleksey), improbable-valentyn, Ivan Popelyshev (ivanpopelyshev), IvanKuzavkov, James Cahill (Prouser123), Jan Kaniewski (getnamo), Jin Hyung Ahn (zenoengine), jkinz3, Joe Best-Rotheray (cajoebestrotheray), joemmett, Josef Gluyas (Josef-CL), Kalle Hämäläinen (kallehamalainen), Kartik Saranathan (Kartiku), korkuveren, Kory Postma (korypostma), Leon Rosengarten (lion03), locus84, lotodore, Marat Radchenko (slonopotamus), Marcel (Zaratusa), Mark Whitty (Mosel3y), mastercoms, Mathias Hübscher (user37337), Michael Kösel (TheCodez), Michael Samiec (m-samiec), Mike Bell (MichaelBell), Mike Slegeir (tehpola), Mimus1, Mitsuhiro Koga (shiena), momboco, Morva Kristóf (KristofMorva), Muhammad A. Moniem (mamoniem), Nick (eezstreet), Nick Edwards (nedwardsnae), Nick Pruehs (npruehs), Ondrej Hrusovsky (skylonxe), Paul Hampson (TBBle), Philippe Chaintreuil (Philippe23), Phillip Baxter (PhilBax), projectgheist, RDIL, Riley Labrecque (rlabrecque), Roman K. (CrispMind), Robin Zoň (ZonRobin), roidanton, ruzickajason, ryugibo, Sam Hocevar (samhocevar), Satheesh (ryanjon2040), Scott Fries (ScottFries), Sébastien Rombauts (SRombauts), ShalokShalom, spoiltos, stanley1108, Stephen A. Imhoff (Clockwork-Muse), stkrwork, sturcotte06, Takashi Suzuki (wankotank), tgroll, Thang To (thangt), Tim Lincoln (Ratherbflyin), TommyTesla, Vladimir Ziablitskii (rainlabs), whoisfpc, YanaPIIDXer, Yannick Comte (demonixis), yhase7, Zeblote

主要機能

新機能:リアルタイム レイトレーシングとパストレーシング (ベータ)

今回のリリースで、NVIDIA RTX シリーズカードの DirectX 12 および DirectX Raytracing (DXR) を最大限に活用し、Windows 10 RS5 アップデートを使用した レイトレーシングおよびパストレーシングのベータ版がサポートされるようになりました。

リアルタイム レイトレーサー

レイトレーシング機能は、一連のレイトレーシング シェーダとレイトレーシング エフェクトで構成されています。これらをそれぞれ使用することで、シャドウイング、アンビエントオクルージョン、反射を作成するモダンなオフライン レンダラに匹敵する、自然でリアルな見た目のライティング エフェクトをリアルタイムで作成できます。

いくつかレイトレーシング機能を導入しましたが、Unreal Engine の今後のバージョンでは、その機能セットを拡張していく予定です。今回のリリースの機能には、次のものがあります。

  • 指向性、ポイント、スポット、矩形のソフトなエリアシャドウ。
  • カメラの視錐台の内外にあるオブジェクトの正確な反射。
  • シーン内の地上のオブジェクトに対するソフトなアンビエントオクルージョン。
  • 透過処理されたサーフェスでの物理的に正しい屈折と反射の発生。
  • 光源からもたらされる動的なグローバル イルミネーションからの間接ライティング。
  • その他

その他、このリリースで現在サポートされている機能の詳細については、リアルタイム レイトレーシングのドキュメントを参照してください。

パストレーサー

レイトレーサーに加えて、グラウンド トゥルース リファレンス レンダリングをエンジンのすぐ内側に作成する、間接ライティングの完全なグローバル イルミネーションのパスを持つ、バイアスのないパストレーサーが追加されました。これにより、比較の際にサードパーティのオフライン パストレーサーにエクスポートする必要なく、Unreal のシーンのワークフロー コンテンツを改善できます。

詳細については、パストレーサーのドキュメントを参照してください。

新機能:高レベルなレンダリング リファクタリング

このリリースでは、描写パフォーマンス向上とリアルタイム レイトレーシングのサポートのため、Unreal Engine でのメッシュ描画を完全に書き直しています。今後も、追加のレンダリング作業を GPU に移していきます。

メッシュ描画パイプライン リファクタリング:

新しいメッシュ描画パイプラインでは、静的シーンにあるエレメントの描画情報が以前よりも積極的にキャッシュされるようになりました。そして、可能な場合は、自動インスタンス化によって描画呼び出しがマージされます。これにより、メッシュ パスの新しい実装で、コードの行数を 4〜6 倍少なくすることができます。

このリファクタリングは、主にカスタム シーン プロキシを使用したレンダラ内でのメッシュ描画に影響を与え、レンダラへのインターフェースへはわずかに影響を与えます。新しいアーキテクチャでは、任意のカスタム描画ポリシーを「FMeshPassProcessors」に書き換える必要があります。つまり、描画ポリシーの後方互換性を維持することは、この大きな変更では不可能でした。

詳細については、メッシュ描画パイプラインのドキュメントを参照してください。

新機能:C ++ のイテレーション時間の改善

ライブ コーディング (実験的機能)

すべてのデベロッパーが Unreal Engine プロジェクトで Molecular Matters の Live++ を使用できるようにそのライセンスを取得し、それを新しい ライブ コーディング 機能として統合しました。ライブ コーディングを使用すると、開発環境で C++ コードを変更し、それを実行中のエディタまたはスタンドアロン ゲームに数秒でコンパイルしてパッチを適用できます。従来のホット リロードのメカニズムとは異なり、ライブ コーディングはオブジェクトの再インスタンス化について特別の考慮を必要とせずに個々の機能にパッチを適用するため、大規模プロジェクトでの信頼性とスケーラビリティが大幅に向上します。

これを使用するには、エディタの [Compile (コンパイル)] ボタンの横にあるドロップダウンから[Live Coding (Experimental) (ライブ コーディング (実験的機能))] オプションをチェックし、「Ctrl」、「Alt」、「F11」を同時押しして、変更をコンパイルして適用します。クック済みのゲームから有効にするには、コンソール ウィンドウに「LiveCoding」と入力します。

注記:

  • エンジンの実行中にクラス レイアウトを変更することはサポートされていません。今後のリリースでサポートする予定です。
  • 現在サポートされているのは Windows のみです。

ビルド時間

UnrealBuildTool と UnrealHeaderTool が最適化され、C++ のイテレーション時間が最大 3 倍高速になりました。

フルビルド (UE4Editor Win64 開発) :

 
 

Unreal Engine 4.21

Unreal Engine 4.22

改善

総ビルド時間:

436.90

326.81

30% 高速化

UnrealHeaderTool のコンパイル:

46.12

46.30

 

ヘッダの生成:

25.05

15.50

60% 高速化

UE4Editor のコンパイル

323.15

257.97

25% 高速化

UnrealBuildTool のオーバーヘッド

42.58

7.04

600% 高速化

インクリメンタル ビルド (UE4Editor Win64 開発) :

 
 

Unreal Engine 4.21

Unreal Engine 4.22

改善

総ビルド時間:

7.47

2.14

340% 高速化

UE4Editor のコンパイル

1.19

1.08

 

UnrealBuildTool のオーバーヘッド

6.28

1.06

590% 高速化

コード変更なし (UE4Editor Win64 開発)

 
 

Unreal Engine 4.21

Unreal Engine 4.22

改善

UnrealBuildTool のオーバーヘッド

5.38

1.03

520% 高速化

さらに、プロジェクトに追加および削除されるファイルの検出、およびコンパイラ主導のインクルード依存関係チェックの使用など、インクリメンタル ビルドの依存関係チェックの精度が大幅に向上しました。

新機能:バーチャル プロダクション パイプラインの改善

Unreal Engine は、パイプラインのあらゆる側面を大きく改善しながら、リアルタイム バーチャル プロダクションの最先端を走り続けます。

Composure によるリアルタイム コンポジット

Composure のコンポジット システムが大幅に改善され、Unreal Engine 内で直接、画像、ビデオ フィード、CG エレメントを合成することがこれまで以上に簡単になりました。

ビルトインのコンポジットを使用すると、グリーンバックのシーンと Unreal Engine にあるレベルのコンテンツをリアルタイムで組み合わせた結果を簡単に視覚化できます。これはプレ ビジュアライゼーションに便利で、撮影されたフィルムが Unreal Engine からのデジタル コンテンツによって強化され、緑色の背景を置き換えた後の最終的なシーンがどのようになるか、撮影現場で監督に見せることができます。エンジン内のこれらの結果は、他のサードパーティ製ソフトウェアでオフラインで作業しているコンポジタに対する貴重な参考資料にもなります。

改善点は次のとおりです。

  • マテリアルを使用したレイヤーのブレンドの操作。
  • ポストプロセス パイプラインを活用した「ライトラップ」のようなエフェクトの作成。
  • Media Framework と Professional Video I/O システムを使用したビデオ入力のキャプチャとレンダリング出力。
  • ビルトインのレンダリング パスを使用したクロマキー、スピル除去、トーンマッピングなど。または、独自のカスタム パスの作成。

Composure システムは、より従来のものに近いオフライン コンポジット ワークフローのサポートも提供します。これにより、選択した Unreal Engine オブジェクトのレンダーをエクスポートして、それらを外部アプリケーションの他のソースと合成することができます。

OpenColorIO (OCIO) カラー プロファイル (実験的機能)

OpenColorIO (OCIO) カラー プロファイルを使用して、Unreal Engine 内でテクスチャまたはコンポジット エレメントの色空間を直接変換することができます。これにより、最初のキャプチャから合成、最終的な出力まで、ビデオやコンピューターで生成されたエレメントの色に一貫性をもたせることができます。

ハードウェア アクセラレーションによるビデオ デコード (実験的機能)

Windows プラットフォームで GPU を使用できるようになり、H.264 ビデオ ストリームの処理を高速化できるようになりました。これにより、ビデオストリームを再生するときに CPU の負荷が軽減されビデオが滑らかになり、高解像度のムービー ファイルとより多くの同時入力フィードが使用できるようになりました。

ハードウェアデコードを使用するには、[Project Settings (プロジェクト設定)] ウィンドウの [Plugins (プラグイン)] - [WMF Media] セクションで [Hardware Accelerated Video Decoding (Experimental)] 設定を有効にします。

新しい Media I/O フォーマット

次の通り、Professional Video I/O 入力フォーマットとデバイスをさらに追加しました。

  • AJA と Blackmagic 両方での 4K UHD 入力。
    • 8bit と 10bit の両方の入力をサポート。
    • シングルリンク、デュアルリンク、クワッドリンクをサポート。
  • AJA Kona 5 デバイスをサポート。
    • HDMI 2.0 入力。
    • 高フレームレート (最大 60fps) での UHD。

nDisplay の改善

このリリースでは、nDisplay マルチディスプレイ レンダリング システムをより柔軟にし、新しい種類のハードウェア構成と入力を処理するためのいくつかの新機能が追加されています。

  • 各クラスタ ノードのアプリケーション ウィンドウで、定義された画面空間座標に複数のビューポートを持てるようになりました。これにより、単一のコンピュータ上で実行されている単一の Unreal Engine インスタンスによって、複数のオフセット表示を処理させることができます。
  • 以前のリリースでは、VRPN の使用のみが nDisplay システムのノードに入力を提供する唯一の方法でした。このリリースでは、cluster event (クラスタ イベント) と呼ばれる新しい通信メカニズムが追加されました。これを使用することで、接続されているすべてのコンピュータで同期させた反応をトリガーできます。
  • nDisplay 設定ファイルでは、様々な入力サブシステムの設定を公開しているので、プロジェクトを再パッケージ化せずに属性とマッピングを変更することができます。
  • すでに nDisplay を使用している場合は、新しいスキーマに合わせて設定ファイルを調整する必要があります。しかしながら、nDisplay Launcher の設定ファイルの自動アップグレードが可能になりました。

詳細については、 「nDisplay のドキュメント」 を参照してください。

新機能:Hololens リモート ストリーミングのサポート

Unreal Engine 4 は、Windows Mixed Reality プラグインを通じて、Holographic Remoting をサポートします。 これにより、Unreal アプリケーションを Windows デスクトップ PC 上で実行し、Wi-Fi 接続を介してレンダリングされた結果をリアルタイムで Hololens にワイヤレスでストリーミングすることができます。

新機能:オーディオ システムの改善

TimeSynth (ベータ)

TimeSynth は、サウンド デザイナーへ音声クリップのサンプルベースの正確な開始、停止、連結を提供することに重点を置いた、新しいオーディオ コンポーネントです。TimeSynth で、インタラクティブな音楽アプリケーションに不可欠な、正確で同期的なイベント オーディオとイベント キューが可能になります。

Sound Concurrency のレイヤー化

Sound Concurrency システムは、複数の設定やグループを監視できるようになりました。サウンド オブジェクト (AudioComponent、SoundBase、SynthComponent) が [ConcurrencySet] プロパティで指定された要件をすべて満たさない場合、新しいサウンドは再生されません。また、新しいサウンドが同時実行セットの解像度規則を満たし再生を開始した場合、1 つ以上のサウンドが停止する可能性があります。

サブミックス用スペクトラル アナライザー (新エンジン)

ゲームプレイ中にサブミックスのスペクトル エネルギーを分析して、現在再生中のオーディオの周波数成分に基づいて、ゲームプレイ、マテリアル、任意の数の可能性のある出力先におけるモジュレーションの操作が可能になりました。

Sound Wave のベイクされたスペクトル解析曲線とエンベロープ

再生中にブループリントを操作するため、Sound Wave でエンベロープ エネルギーとスペクトル エネルギーの事前分析ができます。これにより、サウンド デザイナーは、スペクトル分析の作業の負担を軽減してランタイム パフォーマンスを向上させながら、魅力的なオーディオ駆動システムを作成することができます。さらに、Proxy Sound Wave からの分析データを Sound Wave の分析データに置き換えることができるため、ゲームプレイを進める際に分離したサウンド イベントを偽装することができます。

Sound アセット インポート機能の改善

Sound アセットのインポート機能に大幅な改善を施しました。現在サポートされている「マルチチャンネル WAV」ファイルに加えて、Unreal Audio Engine は「AIFF」、「FLAC」、「Ogg Vorbis」を含む幅広いサウンド ファイル フォーマットのインポートをサポートするようになりました。

MIDI デバイス プラグインの改善

MIDI デバイス プラグインは、MIDI デバイス入力の処理に加えて、外部 MIDI デバイスに MIDI メッセージを送信することができるようになりました。さらに、プラグインのブループリント API の改善により、MIDI メッセージのパースが単純化されています。これらの変更により、サウンド デザイナーはより効率的に MIDI I/O をプロジェクトに統合することができます。

新機能:シーケンサの改善

業界をリードするシーケンサであるリニア アニメーション ツールセットが、新しいツールと機能強化で再度大幅にアップデートされました。これにより、バーチャル プロダクション プロジェクトの作業の質が大幅に改善されます。

シーケンサの Take Recorder

Take Recorder を使用すると、バーチャル プロダクション ワークフローで、レコーディング パフォーマンスの高速なイテレーション、以前のテイクの素早い確認が可能になります。シーケンス レコーダーの基礎をベースにして、記録できる内容とデータの処理方法を改善しました。また、さまざまなユースケースのニーズに合わせて、システムを拡張できるようにしました。シーン内のキャラクターにリンクされたモーション キャプチャのアニメーションや、後の再生用に実際の Live Link データを簡単に記録できます。アクタをサブ シーケンスに記録し、それらをテイク メタデータで整理することで、あらゆるサイズのプロダクションや任意の数のテイクを簡単に調整できます。

詳しくは、「Take Recorder のドキュメント」を参照してください。

Composure シーケンサ トラック

新しい Composure トラックを使用すると、Composure で定義されたレイヤーとしてシーケンスを簡単にエクスポートできます。複数のトラックを追加し、一度に複数のレイヤーをエクスポートできます。レイヤーを Composure から直接シーケンサにドラッグして、それらレイヤーのトラックを生成できます。

シーケンサ内のレイヤー化されたアニメーション ワークフロー

これで、1 つのトラック内で複数の重み付けされたセクションを使ってレイヤー化されたアニメーションを作成できます。レイヤー化されたアニメーションは、他のいくつかのプロパティ トラック同様、トランスフォーム トラックでサポートされています。

Live Link シーケンサ トラック

入力された Live Link データをシーケンサ トラックに記録して再生できるようになりました。タイムコードと、エンジンのティックごとの複数のサンプルが付属している Live Link データは、シーケンサの再生速度よりも高い解像度で保存できます。

オブジェクト バインディング シーケンサ トラック

シーケンサ内のアクタのプロパティに割り当てられているオブジェクト (スタティック メッシュ、スケルタル メッシュ、マテリアルなど) を変更できるようになりました。アクタがシーケンサに追加されると、これらのオブジェクト参照プロパティは、そのアクタの [Track (トラック)] メニューにある他のプロパティと同じように利用できます。

シーケンサでのネットワーク レプリケーション

レベル シーケンス アクタの [Replicate Playback] プロパティを使用してレプリケートするように設定されているレベル シーケンス アクタは、サーバーとクライアント間で再生時間を同期するようになりました。

シーケンサに対する Python のサポート強化

次のムービー シーンの機能に関して、シーケンサに対する Python のサポートが改善されました。

  • ムービー シーン セクションとキーデータの操作
  • ムービー シーンのキャプチャ

その他のシーケンサ改良

  • 複数のオブジェクトの、単一トラックへの割り当てが可能になりました。
  • 一度に複数のトラックからセクションをコピー/ペーストできるようになりました。
  • フレームにラベルを付け、そのマークに素早くジャンプしてシーケンスを再生できるようになりました。マークを識別しやすいように、マークごとに色を設定できます。
  • トラック/セクションのブループリントへの公開 - Todo などサブセクション/テイクの実行時の切り替え

新機能:アニメーションバジェットシステム (ベータ)

新しい Anim Budgeter ツールを使用すると、プラットフォームごとに固定のアニメーションに割り当てる時間 (ゲームスレッドで実行する作業のミリ秒) を設定できます。すべて割り当てることが可能か、実行した作業を削減する必要があるかを判定します。このシステムは、アニメーション更新 にかかる総コストを測定し、1 つの作業単位のコストを計算することによって機能します。割り当てに適合させるため処理を減らす必要がある場合は、重要度に基づいていくつかのエリアをターゲットにして削減処理を行います。つまり、ティックを停止してマスター ポーズ コンポーネントを使用したり、低いレートのアップデートを行ったり、アップデート間の補間の実行 (の判断) などを行います。目的は、固定 (ゲーム スレッド) の割り当て内に収まるように負荷を動的に調整することです。

新機能:アニメーション共有プラグイン

新しく Animation Sharing プラグインが追加されました。これにより、多数のアクタの使用時に要求される全体のアニメーション作業量を減らすことができます。これは、マスター ポーズ コンポーネントシステムをベースにしている一方で、ブレンドと付加的なアニメーションのステートを追加しています。アニメーション ステートは、アニメーション インスタンスが評価されるバケットです。結果のポーズは、バケットのすべての子コンポーネント部分に転送されます。システムの内訳については下の図を参照してください。

下のビデオは、個々のステートを表すスケルタル メッシュ コンポーネントと、ステート間のブレンドに使用されるインスタンスを示しています。また、アニメーション ステートが決定されている個々のアクタである群衆も表示されます。アニメーション ステートに応じて、スケルタル メッシュ コンポーネントは、それらのアニメーションを操作するためにマスター コンポーネントに接続されます。ビデオでは、アニメーション ステートのポーズのみが評価され、群衆アクタは結果のボーン トランスフォームのみをコピーしています。

新機能:長いファイル名のサポート (実験的機能)

Windows 10 Anniversary Update を使用しているユーザーのため、長いファイルパスがサポートされました。これまで、Windows のパスは 260 文字に制限されていました。しかしながら、これは複雑な命名規則とアセットの深い階層を持つプロジェクトでは問題を引き起こす可能性があります。Windows 10 Anniversary Update では、ユーザーと各アプリケーションがオプトインすることを条件として、はるかに長いファイル名がサポートされるようになりました。Windows 10 で長いファイルパスを有効にするには、次のことを行ってください。

  • Windows 10 バージョン 1607 以降を実行していることを確認します
  • グループポリシー設定またはレジストリを介して長いパスのサポートを有効にします ( https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maxpath を参照)
  • Unreal エディタで、[Experimental (実験)] 設定ダイアログの [Enable Long Paths Support] のチェックボックスをオンにします。

注記:一般的に、長いパスはサポートされていません。サードパーティ ツールや、たとえ Windows エクスプローラーといったオペレーティング システムの一部でさえ、正しくサポートされていない可能性があります。

新機能:ブループリントのインデックス作成の最適化

ブループリント検索データのインデックス方法の変更により、Editor と Play-In-Editor の起動時間が大幅に短くなりました。[Find-in-Blueprint] タブが開くまで検索データの更新を保留し、非同期で更新を実行して、ブループリントの再インデックス作成をアセットの読み込みプロセスから切り離します。

新機能:Steamworks サポートの改善

Steam での UE4 の使用が、かつてないほど簡単になりました。Steam でマルチプレイヤー ゲームを作るデベロッパーのため、使いやすさと作業の質が向上しました。

  • Steam 上の Dedicated サーバーで起動時に新しい「-SteamServerName」引数を使うことで、カスタム名 (最大 63 文字) の受け取りが可能になりました。
  • プロジェクトでは、「bUseSteamNetworking」に設定された値を無効にして「NetDriver」設定を基本となる優先ネットワーク レイヤーに設定することで、Steam ネットワーク レイヤーを上書きすることができます。
  • 標準的なゲーム ネットワークに加えて、Steam NetDriver と UE4 Beacons が大幅に使いやすくなりました。
  • プロジェクトの「Target.cs」ファイルに、 Dedicated サーバー名やアプリケーション ID など、Steamで要求される特定の必須の値を設定できるようになりました。これらの値を変更しても、エンジンを再コンパイルする必要はありません。

新機能:プレビュー シーン設定の改善

プレビュー シーン設定に、ライティングを無効にせずに [Environment Cubemap] ([Show Environment]) を非表示にできる機能が追加されました。[Preview Scene Settings] パネルの [Use Sky Lighting] プロパティを確認してください。

新機能:スケルタル メッシュの LOD 低減

スケルタル メッシュ 低減ツールを使用することで、Unreal Editor 内で詳細レベル (LOD) として使用するための、単純化したバージョンのスケルタル メッシュを生成できます。もはや、とても時間がかかりエラーが起こりがちな、外部のデジタル コンテンツ作成 (DCC) プログラムやサードパーティ製ツールに頼る必要はありません。正確で高品質な詳細レベルを作成し、結果をビューポートですぐに確認できます。

追加情報については、 「スケルタル メッシュ削減ツール」 を参照してください。

新機能:プラットフォームごとのプロパティの改善

プラットフォームごとのプロパティは、プラットフォーム グループに加えてターゲット プラットフォームに基づいて値を設定できるように拡張されました。

新機能:Gauntlet Automation Framework の改善

Gauntlet Automation Framework は、使いやすさ、ドキュメント、学ぶべき例に焦点を当てて、いくつかの改善が施されました。

ドキュメントとサンプルの拡充

  • Gauntlet アーキテクチャと、入門に関するドキュメント
  • 追加の ActionRPG およびプロファイルに基づく最適化の例
  • エディタの負荷と PIE 時間をトラックする例

iOS のサポート

Gauntlet は、iOS上での IPA ファイルのインストールと実行をサポートするようになりました(Mac ホストが必要です)。これにより、PC、Mac、PS4、XB1、Switch、Android、iOS がサポートされるようになりました。

プロファイルに基づく最適化

プロジェクトの PS4、XboxOne、Switch での プロファイルに基づく最適化 (Profile Guided Optimization: PGO) ファイルの生成を自動化するためのサンプル スクリプトです。

レポート作成

自動化スクリプトの一部としてカスタム レポートを作成するための HTML および Markdown ビルダーを追加しました。

新機能:Visual Studio 2019 のサポート

Visual Studio 2019 のサポートが追加されました。デフォルトで Visual Studio 2019 を使用するには、エディタのソース管理設定から「Visual Studio 2019」を IDE として選択します。

また、新しい C++ 標準バージョンへの切り替えのサポートも追加されました。プロジェクトがサポートしている C++ 標準のバージョンを変更するには、「CppStandard」プロパティを「.target.cs」ファイルから次のいずれかの値に設定します。

 

バージョン

C++14

CppStandardVersion.Cpp14

C++17

CppStandardVersion.Cpp17

最新

CppStandardVersion.Latest

同時に、UE4 では、Visual Studio 2015 のサポートを廃止しました。プロジェクトを Visual Studio 2015 コンパイラで強制的にコンパイルする場合は、プロジェクトの「.target.cs」ファイルから「WindowsPlatform.Compiler = WindowsCompiler.VisualStudio2015」を設定できます。Epic Games Launcher からダウンロードしたエンジンのバージョンは Visual Studio 2015 をサポートしていないため、内部でのテストは行われません。

新機能:サブシステム

サブシステムは管理されたライフタイムを持つ自動的にインスタンス化されたクラスです。このクラスは、ブループリントと Python を同時にそのまま使用せず、複雑なエンジン クラスの変更または上書きをすることなく、拡張ポイントを簡単に使用できます。

現在サポートされているサブシステムの有効期間

エンジン

class UMyEngineSubsystem :public UEngineSubsystem { ...};

エンジン サブシステムのモジュールがロードされると、サブシステムはモジュールの Startup() 関数が戻った後に Initialize() を実行します。 サブシステムは、モジュールの Shutdown() 関数が戻った後に Deinitialize() を実行します。

これらのサブシステムは、次の GEngine を通してアクセスされます。

UMyEngineSubsystem MySubsystem = GEngine->GetEngineSubsystem();

エディタ

class UMyEditorSubsystem :public UEditorSubsystem { ...};

エディタ サブシステムのモジュールがロードされると、サブシステムはモジュールの Startup() 関数が戻った後に Initialize() を実行します。 サブシステムは、モジュールの Shutdown() 関数が戻った後に Deinitialize() を実行します。

これらのサブシステムは GEditor を通してアクセスされます。

UMyEditorSubsystem MySubsystem = GEditor->GetEditorSubsystem();

注記:これらエディタのみ (Editor Only) のサブシステムは通常のブループリントにはアクセスできず、Editor Utility Widget と Blutility クラスにのみアクセス可能です。

GameInstance

class UMyGameSubsystem :public UGameInstanceSubsystem { ...};

これは UGameInstance を通してアクセスできます。

UGameInstance* GameInstance = ...;
UMyGameSubsystem* MySubsystem = GameInstance->GetSubsystem();

LocalPlayer

class UMyPlayerSubsystem :public ULocalPlayerSubsystem { ...};

これは ULocalPlayer を通してアクセスできます。

ULocalPlayer* LocalPlayer = ...;
UMyPlayerSubsystem * MySubsystem = LocalPlayer->GetSubsystem();

ブループリントからサブシステムへのアクセス

サブシステムは、コンテキストを理解し、キャストを必要としないスマート ノードによって、自動的にブループリントに公開されます。

標準の UFUNCTION() マークアップとルールを使用して、ブループリントで使用可能な API を管理しています。

Python のサブシステム

Python を使用してエディタをスクリプティングしている場合は、ビルトインのアクセサを使用して次のようにサブシステムにアクセスできます。

my_engine_subsystem = unreal.get_engine_subsystem(unreal.MyEngineSubsystem)
my_editor_subsystem = unreal.get_editor_subsystem(unreal.MyEditorSubsystem)

注記:Python は現在実験的な機能です。

新機能:Editor Utility Widget

Editor Utility Widget を使用すると、 UMG UI エディタとブループリント ビジュアル スクリプティングのロジックで作成された新しいユーザー インターフェースを使用して、Unreal Editor の機能を拡張できます。 これらはエディタ専用の UI パネルで、他の Unreal Editor パネルと同じように Windows のメニューから選択できます。

Editor Utility Widget を作成するには、[Content Browser (コンテンツ ブラウザ)] を右クリックして [Editor Utilities (エディタ ユーティリティ)] > [Editor Widget (エディタ ウィジェット)] を選択します。

ブループリントを編集するには、 [Editor Widget Asset (エディタ ウィジェット アセット)] をダブルクリックします。エディタ ウィジェット アセットのブループリントを編集したら、エディタ ウィジェットを右クリックし、 [Run Editor Utility Widget (エディタ ユーティリティ ウィジェットを実行)] を選択してタブで UI を開きます。このタブは、[Level Editor (レベル エディタ)] のタブとだけドッキング可能です。これは [Level Editor] の [Windows] ドロップダウンの [Editor Utility Widgets] カテゴリの下に表示されます。これは実験的な機能です。

新機能:Material Analyzer (マテリアル アナライザー)

Material Analyzer を使用すると、マテリアルとマテリアル インスタンスのパラメータ使用状況について全体像を把握できます。それにより、レンダリング ステートの切り替えを最小限に抑えてメモリを節約するために、マテリアル インスタンスを統合および最適化するタイミングをすぐに発見することができます。Material Analyzer は、 [Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] の下にあります。

マテリアルは、スタティック オーバーライドの同じセットを持つマテリアル インスタンスのグループを示すサジェストのリストとともにツリー内に表示されるので、最適化を行うことができます。すべての関連インスタンスをローカル コレクションに入れることもできるので、それらを簡単に見つけられ、更新ができます。

新機能:子と子孫のアクタの選択

[World Outliner (ワールド アウトライナー)] のコンテキスト メニューと [Level Viewport (レベル ビューポート)] を使用して、選択したアクタのすべての直接の子またはすべての子孫に選択範囲を拡張できるようになりました。これにより、大きく複雑なシーン階層での作業が簡単になりました。

新機能:拡大・縮小カメラのズームとパン

レベル ビューポートで 1 つ以上のオブジェクトを選択している場合、カメラのズーム操作とパン操作の感度が、オブジェクトとカメラの間の距離に応じて自動的に調整されるようになりました。これにより、特に小さな機械部品や広い風景など極端なサイズのオブジェクトを扱うときに、カメラをより自然に動かすことができます。

[Editor Preferences (エディタの環境設定)] ウィンドウの [Level Editor (レベル エディタ)] > [Viewport (ビューポート)] セクションで新しい [Use distance-scaled camera speed] 設定を無効にすると、以前の挙動に戻すことができます。

新機能:選択したオブジェクトを中心としたカメラオービット操作

1 つまたは複数のオブジェクトがレベル ビューポートで選択されている場合は、画面中央を中心にして周回するのではなく、選択したオブジェクトのピボットを中心にカメラを周回させることができるようになりました。

このモードを有効にするには、[Editor Preferences (エディタの環境設定)] ウィンドウの [Level Editor (レベル エディタ)] > [Viewport (ビューポート)] セクションで新しい [Orbit camera around selection] 設定を有効にします。

新機能:複数レイヤーの表示/非表示を切り替える

複数のレイヤーの表示/非表示を同時に切り替えることができます。「CTRL」を押しながら各レイヤーをクリックして、選択したものをビルドします。次に、選択したレイヤーの横にある [目のアイコン] をクリックして、選択したすべてのレイヤーの表示/非表示を切り替えます。

新機能:マルチ ユーザー編集 (ベータ)

複数レベルのデザイナーやアーティストが、Unreal Editor の複数のインスタンスを接続して共有編集セッションで共同作業し、同じ仮想ワールドをリアルタイムで一緒に作成できるようになりました。

  • Dedicated サーバーは、すべてのユーザーによって行われたすべての変更を追跡し、接続されているすべてのコンピュータ間でエディタの状態を同期させます。
  • 1 台のコンピュータでレベルとシーケンスを変更すると、その変更は自動的にミラーリングされ、同じセッションに参加している他のすべてのコンピュータに反映されます。
  • マテリアルなど、他の種類のアセットに変更を加えると、それらのアセットを保存するときに変更内容が他のすべてのコンピュータにレプリケートされます。
  • 編集セッションを終了する前に、各ユーザーはそのセッション中に加えられた変更を自分のプロジェクトのローカル コピーに適用するかどうかを選択できます。

新機能:プレビュー レンダリング レベルの改善

すべてのエディタのビューポートで同じシェーディング モデルを一貫して使用し、デフォルトの Shader Model 5 (SM5) と選択したプレビュー レンダリング レベルの即座な切り替えを可能にするため、様々なデバイスやプラットフォームのシェーディング モデルを扱う際のモバイル プレビューアのワークフローが向上しました。

プラットフォームのシェーダをコンパイルするには、メイン ツールバーの [Settings (設定)] ドロップダウンから [Preview Rendering Level (プレビュー レンダリング レベル)] を選択します。コンパイルが終了したら、メイン ツールバーに追加された [Preview Mode (プレビュー モード)] ボタンを使って表示モードを切り替えます。

詳細については、「モバイル プレビューア」のドキュメントを参照してください。

新機能:モバイルでの動的スポット ライトのサポート

ハイエンドのモバイル デバイスで、シャドウをキャストしない動的スポット ライトをサポートするようになりました。

[Support Movable Spotlights (可動スポット ライトのサポート)] を「true」に設定することで、[Project Settings (プロジェクト設定)] > [Rendering (レンダリング)] > [Mobile Shader Permutations (モバイル シェーダの順列)] から動的スポット ライトを有効にできます。

詳しい情報については、 「モバイル プラットフォーム用のライティング」 を参照してください。

新機能:SaveGame System iCloud のサポート

UE4 は、iOS と tvOS の両方で、ISaveGameSystem インターフェースを使用して iCloud へのゲームの保存をサポートします。[(Project Settings (プロジェクト設定)] > [Platforms (プラットフォーム)] > [iOS] > [Online (オンライン)] の順に選択し、[Enable Cloud Kit Support] オプションを有効にすると、ゲームを iCloud に保存できます。次に、[iCloud save files sync strategy] オプションから、プロジェクトに最適な同期方法を選択できます。現在利用可能な iCloud 同期オプションは以下の通りです。

  • [Never (同期しない)] (iCloud を ゲームのロード/保存に使用しない)
  • [At game start only (ゲーム開始時のみ同期)] (iOS) [Always (常時)] (LoadGame が呼び出されるたびに同期する)

新機能:デバイス出力ウィンドウの改善

アウトプットログ ウィンドウが大幅に改善され、実験的機能ではなくなりました。アウトプットログ ウィンドウを使用して、PC から iOS デバイスにコンソール コマンドを送信できます。デバイス出力ログにアクセスするには、メイン メニューから[Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] > [Device Output Log (アウトプットログ)] をクリックします。

新機能:HTML5 プラットフォームの改善 (実験的機能)

HTML 5 プロジェクトのマルチスレッドが実験的機能としてサポートされるようになりました。この機能を有効にするには、Unreal Engine 4 のソースコードにアクセスする必要があります。

一部のブラウザでは、マルチスレッド モードで実行するために特別なフラグを有効にする必要があります。詳細は、 「https://github.com/emscripten-core/emscripten/wiki/Pthreads-with-WebAssembly」 を参照してください。

  • Chrome の場合以下のフラグを付けて chrome を実行してください。
    --js-flags=--experimental-wasm-threads --enable-features=WebAssembly,SharedArrayBuffer
    別の方法としては、「WebAssembly スレッド サポート」として chrome://flags/#enable-webassembly-threads から有効/無効にできます。
  • Firefox Nightly は、[javascript.options.shared_memory] 設定を「true」に設定することで、about:config で [SharedArrayBuffer] を有効にできます。

新機能:iOS の優先する画面方向

横向きにした際の左向きと右向きの両方がサポートされている場合に、iOS デバイス起動時の初期方向として優先的に使用する方向を設定できるようになりました。

新機能:Niagara Vector Field Data インターフェース

Niagara Vector Field Data インターフェースは、CPU パーティクルと GPU パーティクルの両方で同じように機能するようになりました。Sample Vector Field モジュールを使用して、ベクトル フィールドをサンプリングできます。3 つの主な入力が公開されています。

  • VectorField:これはベクトル フィールド データ インターフェース インスタンスで、スタティック ベクトル フィールド オブジェクトそれ自体と、軸ごとのタイリングのフラグを含みます。
  • SamplePoint:これはベクトル フィールドがサンプリングされる点です。デフォルトでは Particles.Position ですが、これはカスタマイズできます。
  • Intensity:これはサンプリングされたベクトルを拡大縮小します。

次の通り、複数のオプション入力もあります。

  • ApplyFalloff:サンプリングされたベクトルにフォールオフ関数を適用するには、これをチェックしてください。そうすることで、ベクトル フィールドの影響がベクトル フィールドのバウンディング ボックスのエッジに向かってゼロに近づきます。
  • UseExponentialFalloff:フォールオフ関数を線形関数ではなく指数関数にするには、これをチェックします。
  • FalloffDistance:フォールオフ関数を適用するとき、このパラメータはバウンディング ボックスのエッジからフォールオフが適用される距離を決定します。
  • FieldCoordinates:これにより、エミッタの「Localspace」パラメータの上書きが可能になります。これには次の 3 つのオプションがあります。
    • Simulation:「Emitter.Localspace」パラメータを使用します。
    • World:「Emitter.Localspace」パラメータに関係なく、ベクトル フィールドの位置と変換を上書きして、常にワールド基点を基準とするようにします。
    • Local:これは、「Emitter.Localspace」パラメータに関係なく、常にベクトル フィールドの位置と変換を上書きして、常にシステム自体に対して相対位置となるようにします。
  • FieldTranslate:これは、FieldCoordinates で定義されたとおりに、基点に対してベクトル フィールドをオフセットします。
  • FieldRotate:これは、FieldCoordinates で定義されたとおりに、基点に対してベクトル フィールドを再度回転させます。
  • FieldScale:これはベクトル フィールドを拡大縮小します。

SampleVectorField モジュールは多くのユーティリティ機能を提供するため、オーバーヘッドが発生する可能性があります。スクリプト エディタのベクトル フィールド データ インターフェース オブジェクトに「SampleField」ノードを含めることで、特殊なベクトル フィールド サンプリングを使用できます。

トランスフォーム変換は適用されないため、ここの入力で想定されているのはベクトル フィールド自体のボリュームに対する相対値になります。

「VectorFieldVisualizationSystem」という名前で、ベクトル フィールドを簡単に視覚化して使用するための例が含まれています。

新機能:Niagara Curl Noise Data インターフェース

Curl Noise Data インターフェースは、基礎となるシンプレックス ノイズ関数に基づいてプロシージャルのカール ノイズを生成できるようになりました。CPU と GPU エミッタの両方で同じ結果を生成します。パーティクルのカール ノイズを生成するには、SampleCurlNoiseField モジュールを使用することをお勧めします。このモジュールは次の 2 つの主な入力が公開されています。

  • Strength:モジュールによって生成された出力ベクトルを拡大縮小します。
  • Length Scale:カール ノイズによって発生する渦のおよその大きさを表します。

次の 3 つのオプション入力があります。

  • Offset:これはノイズ フィールドをパンするために使用されます。
  • Noise Field:これはデータ インターフェース オブジェクトそのものであり、主にシードの調整に使用されます。
  • Sample Point:これはサンプリング元を指定します。デフォルトは 「Particles.Position」 ですが、他の値も使用できます。

カール ノイズ フィールドはもともとタイリングせず、そのプロシージャルな性質から突然終了することはありません。タイリングする カール ノイズ フィールドを取得するには、代わりに Vector Field Data インターフェースを使用して、周期的なボリューム テクスチャ カール ノイズをベクトル フィールドとして使用することを検討してください。

新機能:Niagara における決定論的(Deterministic)乱数生成

CPU と GPU の両方で Niagara エミッタ用の決定論的乱数生成がサポートされるようになりました。生成された乱数の動作は、以下のオプションを使用して、エミッタのプロパティ モジュールからグローバルに制御できます。

  • Determinism:エミッタ全体について、決定論的または非決定論的乱数を切り替えるためのフラグです。
  • Random Seed:決定論的乱数ジェネレータによって使用されるグローバル シードです。

スクリプト内で乱数を生成するには、RandomRange Niagara 関数の使用をお勧めします。この関数は、現在次の入力を受け入れます。

  • Min:生成される乱数の下限を定義します。これは、整数型または浮動小数点型となります。
  • Max:生成される乱数の上限を定義します。これは、整数型または浮動小数点型となります。
  • RandomnessMode:これは乱数発生器の決定論モードを制御する列挙型変数で、次のようになります。
    • Simulation Defaults:これがデフォルトの動作です。 Emitter.Determinism の値を継承します。
    • Deterministic:決定論的乱数ジェネレータを使用します。
    • Non-deterministic:非決定的乱数ジェネレータを使用します。
  • OverrideSeedEmitter.GlobalSeed で指定されたシードを上書きするかどうかを決定します。
  • SeedOverrideSeed が有効な場合、この値は Emitter.GlobalSeed を上書きするために使用されます。

最後の 3 つ、RandomnessModeOverrideSeedSeed は、最初は非表示になっていますが、ノードの下部にある [矢印] をクリックすると表示されます。

決定論的乱数を生成するもう 1 つの方法は、シードを「Seeded Random」ノードに明示的に渡すことです。たとえば、Random Range 機能の特殊化する方法は次のようになります。

決定論的乱数は、非決定論的乱数よりわずかに負荷が重くなります。生成されるタイプに応じて、1.5 倍から 2.0 倍重くなります。一般に、スクリプトに複数の乱数が必要な場合は、1 回の呼び出しでそれらを生成し、それらを別々に処理する必要がある場合は結果を分割することをお勧めします。

新機能:Niagara 数学演算用の追加入力

スクリプト数学演算の多くで、[Add (追加)] (+) ボタンをクリックするか、[Add (追加)] ボタンの隣にあるピンに接続することによって、追加可能な入力ピンを任意の数で加えられるようになりました。

新機能:非推奨の Niagara スクリプトに対するサポート

モジュール、動的入力、関数用のスクリプトは、スクリプト エディタで「非推奨」としてマークすることができます。非推奨のスクリプトを使用しているエミッタとシステムでは UI にエラーが表示されるようになり、それらスクリプトは、スクリプトを追加するためのメニューには表示されなくなります。

新機能:Niagara 初期化モジュール

パーティクルを初期化するときに使用される最も一般的な属性を公開するモジュールが新しく追加されました。

新機能:Niagara の「Select by Simulation Target」ノード

新しい「Select by Simulation Target」ノードを使用すると、エミッタが CPU ベクターマシンで実行されているのか、GPU 計算スクリプトで実行されているのかに応じて、異なるロジックを実行できます。一般的に、ほとんどのスクリプトは両方のシミュレーション ターゲットで同じように動作します。ただし、これは常に使用できるわけではありません。データ インターフェースの呼び出しを行う場合は特にそうです。正確なパリティが利用できない場合は、一貫性のある動作をビルドするため、この新しいノードからモジュール製作者により多くのツールが提供されます。この使用例については、「新しいコリジョン反応モジュール」を参照してください。

新機能:Niagara のコリジョン システム

Niagara のコリジョンは完全に書き直され、レイトレース ベースの CPU コリジョン、CPU+GPU 解析の平面コリジョン、GPU シーン深度、距離フィールド コリジョンをサポートするようになりました。

追加機能は次のとおりです。

  • 以前の Niagara とカスケードの実装と比較して、安定性が全面的に大幅に向上しました。
  • CPU コリジョンでは、反発係数や摩擦係数など、シーンの物理的なマテリアル特性の組み込みをサポートし、また、いくつかの統合スキームを提供するようになりました。
  • システムは、使いやすさを向上するために単一のモジュールとして書かれました。
  • コリジョンが、すべてのレンダラとの組み合わせで機能するようになりました。
  • 「rest」ステートが設定可能になりました。それにより、特に難しい状況においてもパーティクルを安定させることができます。
  • 方程式は物理に基づくか影響を受けるようになり、質量と他のシステム特性を使用して機能するようになりました。
  • 静摩擦、滑り摩擦、転がり摩擦など、数多くの高度なオプションが公開されました。
  • コリジョン半径はスプライトとメッシュに対して自動的に計算されるようになりました。オプションで、このパラメータを直接指定できます。

新機能:プラットフォームの SDK アップグレード

Unreal Engine 4 はリリースの都度、プラットフォームのパートナーからリリースされる最新の SDK に対応するようにアップデートしています。

  • IDE バージョン ビルド ファームのコンパイル対象
    • Visual Studio 2017 v15.6.3 ツールチェーン (14.13.26128) と Windows 10 SDK (10.0.16299.0)
      • Minimum Supported versions
        • Visual Studio 2017 v15.6
      • Requires NET 4.6.2 Targeting Pack
    • Xcode - Xcode 10.1
  • Android
    • Android NDK r14b (新しい CodeWorks for Android 1r7u1 インストーラは、Windows および Mac 上の、以前の CodeWorks を置き換えます。Linux は 1r6u1 と修正版を使用します)
    • 注意: 機能ごと(例: RECORD_AUDIO、CAMERA)にパーミッションリクエストが必要になりました。
  • HTML5
    • Emscripten 1.37.19
  • Linux "SDK" (クロスツールチェーン)
  • Lumin
    • 0.19.0
  • Steam
    • 1.39
  • SteamVR
    • 1.0.16
  • Oculus Runtime
    • 1.32
  • Switch
    • SDK 7.3.0 + optional NEX 4.4.2 (Firmware 7.x.x-x.x)
    • SDK 6.4.0 + optional NEX 4.6.2 (Firmware 6.x.x-x.x)
      • Supported IDE: Visual Studio 2017, Visual Studio 2015
  • PS4
    • 6.008.061
    • ファームウェア バージョン 6.008.021
    • サポートされている IDE:Visual Studio 2017、Visual Studio 2015
  • XboxOne
    • XDK:2018年7月 QFE-4
    • ファームウェア バージョン:2018年12月 (バージョン 10.0.17763.3066)
    • サポートされている IDE:Visual Studio 2017
  • macOS
    • SDK 10.14
  • iOS
    • SDK 12
  • tvOS
    • SDK 12