Physics for ECS:Havok Physics for Unity と Unity Physics
Tutorial
·
intermediate
·
+10XP
·
25 mins
·
(14)
Unity Technologies

このチュートリアルでは、Unity の Entity Component System (ECS) フレームワークを使用したプロジェクトで利用できる 2 つの高度な物理演算ソリューション、Havok Physics for Unity と Unity Physics について学習します。
Languages available:
1. 概要
物理シミュレーションに関しては、プロジェクトによってニーズが異なります。Unity にはさまざまな物理エンジンがあり、プロジェクトのニーズに合わせて選択することができます。このチュートリアルでは、Unity の Entity Component System フレームワークを使用したプロジェクトで利用できる 2 つの高度な物理演算ソリューションである Havok Physics for Unity と Unity Physics について学びます。
このチュートリアルが終わるころには、次のことができるようになります:
- Havok Physics for Unity と Unity Physics の主な利点について説明する
- Unity Physics と Havok Physics for Unity の関係を説明する
- ECS の物理演算ソリューションがプロジェクトに適している状況を特定する。
重要:このチュートリアルは、DOTS の一環として中級者以上のユーザーを対象に、Unity で ECS ベースのプロジェクト向け物理演算ソリューションを紹介するものです。DOTS とは、Unity の Data-Oriented Technology Stack のことで、複雑なプロジェクトを高度に最適化したパフォーマンスで作成する必要のある上級ユーザー向けのデータ指向型のテクノロジーです。DOTS そのものについて詳しく知りたい方は、新たにリリースされた DOTS Guide (GitHub) をお薦めします。
2. Unity での物理演算
Unity の高度な物理演算ソリューションについて学ぶ前に、いくつかの基本的な事項を確認しておきましょう。
リアルタイム体験における物理演算とは、オブジェクトの特性や力に対する反応を非常に高いレベルで表したものです。例えば、レーシングカーの運転体験をできるだけ正確に再現することを目的としたゲームなど、現実世界を再現する形で物理シミュレーションを行うプロジェクトもあります。また、オブジェクトが衝突したときの予期せぬ挙動や、プレイヤーキャラクターの不可能な跳躍など、現実世界とかけ離れた物理法則をゲーム内に実装する、より柔軟なアプローチをとるプロジェクトもあります。
Unity のプロジェクトで物理シミュレーションを行う方法は、特定の物理エンジンによって決定されます。リアルタイムエンジンがゲームやシミュレーションなどの体験を作るためのフレームワークであるように、物理エンジンはプロジェクトに物理法則を実装できるように、ゲームエンジンに統合するためのフレームワークなのです。
Unity では、取り組んでいる特定のプロジェクトに応じて、さまざまな物理エンジンを選択することができます。
オブジェクト指向プロジェクトのための物理エンジン
オブジェクト指向のプロジェクトに取り組む場合は、ビルトイン 3D 物理エンジンか、ビルトイン 2D 物理エンジンのどちらかを使用できます。
データ指向プロジェクトのための物理エンジン
Unity の Entity Component System (ECS) は、従来のオブジェクト指向の方法とは異なり、データ指向の方法でプロジェクトを構成します。ECS ベースのプロジェクトで作業する場合、ECS と互換性のある物理パッケージをインストールする必要があります。現在、以下の 2 つのパッケージが利用可能です:
- Unity Physics:ECS に対応した物理エンジンで、あらゆる ECS プロジェクトで物理シミュレーションを行うことができます。Unity Physics は、Unity のすべてのバージョンで利用可能です。
- Havok Physics for Unity:Unity Physics パッケージの拡張として使用できる Unity の Havok Physics エンジン の実装。Havok Physics for Unityは Unity Pro または Unity Enterprise のサブスクリプションで使用することができます。
3. Unity DOTS の物理演算の基本
DOTS (Data-Oriented Technology Stack) は、ゲームやアプリケーションの表示件数が多い場合(例えば、大きなボールプールや玉入れシミュレーションで、個々の球が独立したものとして表示される必要がある場合)、経験豊富なクリエイターに大幅なパフォーマンスの向上を提供することが可能です。DOTSは、扱うアイテム数が少ないプロジェクトのパフォーマンスへの影響を軽減します。
Entity Component System (ECS)
Entity Component System (ECS) は、Unity Data-Oriented Tech Stack の中核となるシステムです。このシステムには 3 つの主要な部分があります:
- エンティティ (Entities):アプリケーションを構成する実体、または入れ物。エンティティは本質的に ID であり、どのデータが一緒に属しているかを表す物です。エンティティは、それ自体は振る舞いやデータを持つことはありません。
- コンポーネント (Component):エンティティに関連するデータは、エンティティごとではなく、データそのものによって構成されます。このような構成の考え方は、オブジェクト指向とデータ指向の重要な違いのひとつです。
- システム (System):コンポーネントデータを現在の状態から次の状態に変換するロジック。例えば、あるシステムでは、エンティティの速度に前のフレームからの時間間隔を掛けて、移動するすべてのエンティティの位置を更新することができます。
ECS に対応した物理演算ワークフロー
ECS を使用するプロジェクトにおける、物理演算のハイレベルなワークフローを確認しましょう:
- ECS を使ったプロジェクトでは、他のプロジェクトと同様に Unity エディターでゲームオブジェクトを作成し、ベイキングを使ってゲームオブジェクトのデータを Entity Scenes に書き込まれた Entity に変換することが可能です。
- Entity 変換プロセスでは、Physics オーサリングコンポーネント(および任意のジョイントスクリプト)の情報をエンティティデータに変換します。
- Build Physics World システムは、その物理データを、ランタイムと大量のランダムアクセスクエリに最適化された別のフォーマットに変換します。
- 次に、物理データを処理する物理エンジンの Unity Physics または Havok Physics for Unity を選択します。
- 物理エンジンが作業を終えると、Export Physics World システムはランタイム用に最適化された物理データを受け取り、ECS データに変換して戻します。

4. ECS ワークフローのための物理演算の理解を深める
DOTS の物理演算ワークフローについてもっと詳しく知りたい上級者の方は、Unite Copenhagen 2019 の Havok Physics in Unity の講演から抜粋したこれらの動画から始めるとよいでしょう。
重要:これらのビデオは上級者向けです。ECS を使用するプロジェクトの物理エンジンオプションについて高レベルで理解するために、これらのビデオを見る必要はありません。
ECS ベースの物理演算 — ECS の概要
このビデオでは、前のステップで説明したプロセスの概要をより詳しく説明しています。
ECS ベースの物理演算 — データ
このビデオでは、ECS を使用するプロジェクトで、選択した物理エンジンに入力されるデータと出力されるデータの概要を説明します。
5. ECS 互換の物理エンジンにはどんな違いがあるの?
ECS を使用するプロジェクトには、Havok Physics for Unity と Unity Physics の 2 種類の物理エンジンがあることがお分かりいただけたと思います。これらの物理演算ソリューションは、いずれも Unity の ECS フレームワークをベースにしているため、同じデータプロトコルを使用します。つまり、コンテンツやゲームコードを作り直すことなく、2 つの異なる物理エンジン間でプロジェクトを移行することができるのです。
Unity Physics、Havok Physics for Unity、またはその両方を使用している場合でも、ユニファイドデータプロトコルにより、一度オーサリングを行えば、あとは ECS 互換の物理システムで物理シミュレーションを行うことができます。
Unity Physics
Unity Physics は、Unity の ECS フレームワーク上に構築されています。ネットワーク対応、完全なカスタマイズが可能で、箱から出してすぐにパフォーマンスが発揮できるように作られています。Unity Physics は、Burst コンパイラと Unity の C# Job System を使用して、さまざまなデバイスで物理シミュレーションのパフォーマンスを最適化します。
Unity Physics は現在プレビューリリースで、Package Manager から入手可能です。Unity 2022.2 以降のバージョンと互換性があります。Unity Physics は、Unity のサブスクリプションに関係なく、無料で使用することができます。
Havok Physics for Unity
Havok Physics for Unity は、複雑な物理シミュレーションを必要とするクリエイター向けのハイエンドなソリューションです。Unity Physics と同じ ECS フレームワークを使用していますが、クローズドソースである Havok Physics エンジンの機能およびパフォーマンスを備えています。Havok Physics エンジンはネイティブ C++ で記述されています。
Havok Physics for Unity をご利用いただくには、Unity Pro または Unity Enterprise のサブスクリプションが必要です。
Havok Physics は、物理的なインタラクションが多く複雑なシーンを含む、最もグラフィックを重視したゲームでの物理シミュレーションに最適化されています。Havok physics を Unity で使うメリットは以下の通りです:
- 物理ボディのスタッキングの安定性
- 高速に移動する物理ボディがある場所では、アーティファクトを最小限に抑えることができる。
- 特に最適化されていないコリジョンジオメトリを使用している場合、一般的により制御された動作になる。
以下のビデオでは、Unity と Havok が協力して Unity の ECS フレームワーク上に Havok Physics for Unity を作成した経緯について触れています。
6. ECS 互換の物理エンジンの違いを評価する
Unity の DOTS Samples リポジトリには Physics Samples プロジェクトが含まれており、Unity Physics と Havok Physics for Unity(お使いのエディションでアクセスできる場合)の両方をテストするのに使用できます。
以下の手順で、物理エンジンの違いを評価してください:
1. Unity 2022.2 をインストールしていない場合は、インストールしてください。
2. Physics Samples プロジェクトをダウンロードし、UnityPhysicsExample プロジェクトをエディターで開いてください。
3. まだインストールしていない場合は、Havok Physics for Unity パッケージをインストールします。
4. Project ウィンドウで、Assets > Tests Pyramids と進み、Pyramids のテストシーンを開いてください。
5. Play を選択すると Unity Physics エンジンを使ったシミュレーションシーンが実行され、もう一度選択するとシミュレーションが停止し、ピラミッドスタックが再送信されます。
6. Hierarchy で、Physics Scene Basic Elements ゲームオブジェクトの折りたたみを展開し、Physics Settings の子ゲームオブジェクトを選択します。
7. Inspector で、Physics Step コンポーネントに移動し、Simulation Type プロパティを見つけます。これを Havok Physics に設定します。

注:また、ランタイムで物理エンジンを切り替えることも可能です。
8. Play を選択すると、ピラミッドシミュレーションが再び実行されます。
9. Game ビューでは、次のようなことができます:
- 左クリックで動的なゲームオブジェクトを選択し、ドラッグすることができます。
- 右クリックしてドラッグすると、Game ビューでビューを変更できます。
- ASWDQE キーを使ってカメラを移動します。
Havok Physics for Unity ではシミュレーションキャッシュを使用しているため、Unity Physics のときよりもシミュレーションが安定していることがわかります。
7. 次のステップ
ECS に対応した物理エンジンの基本についてお分かりいただけたと思います。また、学習を継続するために、さまざまなリソースが用意されています:
- DOTS 全般の理解を深めるために、DOTS Guide on GitHub と DOTS Best Practices コースから始めてください。
- Unity の DOTS 物理演算ソリューションの詳細については、Unite Copenhagen 2019 の Havok Physics for Unity (YouTube) の全概要をご覧ください。
- ECS 対応の物理演算を使い始めるには、Unity Physics と Havok Physics for Unity パッケージのドキュメントを参照してください。また、Physics for ECS フォーラムで他のクリエイターとつながることができます。