コリジョンの概要

アンリアル エンジン 4 におけるコリジョンとコリジョン応答の動作の概要

Windows
MacOS
Linux

コリジョン反応 (Collision Responses)トレース反応 (Trace Responses) は、アンリアル エンジン 4 がランタイム中にコリジョンとレイキャストをどのように処理するかの基礎となります。衝突しうるオブジェクトはすべて、他のすべてのタイプのオブジェクト タイプとの相互作用方法が定義されている オブジェクト タイプ と反応を取得します。コリジョンまたはオーバーラップのイベントが発生すると、それに伴う両方の (すなわちすべての) オブジェクトはブロック、オーバーラップ、または互いに無視することで影響を与える、または影響を受けるように設定することができます。

トレース反応 も、基本的に同じように機能します。ただし、トレース (レイキャスト) 自体は、トレース反応のタイプの 1 つとして定義されることがあり、アクタが その トレース反応に基づき、ブロックまたは無視することができます。

相互作用

コリジョンの処理方法に関して、以下のルールは覚えておいてください。

  • Blocking は、Block に設定された 2 つ (以上) のアクタの間に自然に発生します。ただし、ブループリント、被破壊アクタ、トリガーなどで使用する Event Hit を実行するために [Simulation Generates Hit Events (シミュレーションでヒット イベントを生成する)] を有効にする必要があります。

  • アクタを [Overlap] に設定するとお互い 無視 しているように見えます。[Generate Overlap Events (オーバーラップ イベントを生成する)] が無効の場合は、本質的に同じになります。

  • シミュレーションしている 2 つ以上のオブジェクトが互いをブロックするには、互いのオブジェクト タイプをブロックするように両方のオブジェクトを設定する必要があります。

  • 2 つ以上のオブジェクトをシミュレーションする場合、あるオブジェクトが別のオブジェクトをオーバーラップし、2 つ目のオブジェクトは別のオブジェクトをブロックする設定の場合、オーバーラップは起こりますが、ブロックは起こりません。

  • あるオブジェクトが別のオブジェクトを ブロック しても、高速で移動している場合は特に、オーバーラップ イベントは生成 可能 です。

    • 1 つのオブジェクトにコリジョンとオーバーラップの両方のイベントを付けることはお勧めしません。可能ではありますが、手作業がいろいろ必要になります。

  • あるオブジェクトは無視する設定にして、別のオブジェクトはオーバーラップする設定にすると、オーバーラップ イベントは発行されません。

レベルをテストし、ワールドをあちこち見る目的では、以下のようになります。

  • デフォルトの Play In Editor カメラはポーンです。従って、ポーンをブロックするように設定されたものによってブロックされます。

  • 何かを所有する前の Simulate in Editor カメラはポーンでは ありません。何でも自由にくっつけることが可能で、コリジョンやオーバーラップのイベントは作成しません。

一般的なコリジョンの相互作用のサンプル

一般的なコリジョンの相互作用では、何もかもと完全に衝突するように [Collision Enabled (コリジョンを有効にする)]Collision Enabled に設定されていることを前提とします。すべての Collision Response (コリジョン反応) に対して ignore (無視) が設定されているかのようになります。

この後のセクションでは、以下のセットアップを使用して何が起こっているかを説明します。

COL_setup.png

球体は PhysicsBody であり、ボックスは WorldDynamic です。コリジョン設定を変更することで、数多くのビヘイビアが得られます。

コリジョン

コリジョン設定を互いにブロックすると設定することで、衝突が得られます。これは、オブジェクトを互いに相互作用させるうえで優れています。

COL_collideNoEvent.png

球体コリジョンのセットアップ

ウォール コリジョンのセットアップ

COL_collideNoEvent_Sphere.png

COL_collideNoEvent_Box.png

この場合、球体は PhysicsBody であり、 WorldDynamic (これはウォールを示します) を block するように設定されます。

ウォールは WorldDynamic であり、PhysicsBody アクタ (これは球体を示します) をブロックするように設定されます。

この場合、球体とウォールは単に衝突し、コリジョンの通知はこれ以上ありません。

Collision と Simulation Generates Hit Events

コリジョンは有用であり、一般的に物理相互作用で最低限必要なものです。しかし、ブループリントまたはコードのセクションがトリガーできるように衝突した何かを報告したい場合、以下のようにします。

COL_collideEvent.png

球体コリジョンのセットアップ

ウォール コリジョンのセットアップ

COL_collideEvent_Sphere.png

COL_collideNoEvent_Box.png

上記の例のように、球体は PhysicsBody であり、WorldDynamic (これがウォールを示します) を block するように設定されます。この場合、この球体では [Simulation Generates Hit Events] も有効にし、球体が何かと衝突するたびに自己のためにイベントをトリガーするようにします。

ウォールは WorldDynamic であり、 PhysicsBody アクタ (これは球体を示します) を block するように設定されます。ウォールは Simulation Generates Hit Events に設定されていないため、自己のためにイベントを生成しません。

球体が Simulation Generates Hit Events に設定されている状態で、コリジョンがあったことを自己に知らせます。その球体のブループリントで ReceiveHitOnComponentHit などのイベントを発行します。ボックスにコリジョンのイベントがあると、コリジョンの発生を自ら通知することは絶対にしないので、発行しません。

さらに、剛体コリジョンをレポートしているオブジェクトは、すべてをレポートし、何かに単に座っている場合にレポートをスパムします。そのため、そのブループリントまたはコードで衝突しているものをフィルタリングするよう注意を払ったほうが良いでしょう。

Overlap (オーバーラップ) と Ignore (無視)

あらゆる用途と目的において、[Generate Overlap Events] が無効になっていることを前提として、OverlapIgnore は全く同じように機能します。この場合、球体はボックスをオーバーラップまたは無視するように設定されます。

COL_ignore.png

球体コリジョンのセットアップ

ウォール コリジョンのセットアップ

COL_OverlapNoEvent_Sphere.png

COL_collideNoEvent_Box.png

ここでは、球体は WorldDynamic アクタを「オーバーラップ」するように設定されますが (ウォールのように)、[Generate Overlap Events] は有効になっていません。球体に関しては何にも衝突せず、オーバーラップもせず、ウォールを事実上、無視します。

ウォールは WorldDynamic であり、 PhysicsBody アクタ (これは球体を示します) を block するように設定されます。上記のように、両方のアクタが互いのオブジェクト タイプをブロックするように設定する必要があります。そうでない場合、衝突しません。

または

球体コリジョンのセットアップ

ウォール コリジョンのセットアップ

COL_ignore_sphere.png

COL_collideNoEvent_Box.png

球体は WorldDynamic アクタ (ウォールと同様) を ignore するように設定され、ウォールを通過します。

ウォールは WorldDynamic であり、PhysicsBody アクタ (これは球体を示します) を block するように設定されます。上記のように、両方のアクタが互いのオブジェクト タイプをブロックするように設定する必要があります。そうでない場合、衝突しません。

Overlap と Generate Overlap Events

フレーム毎に発行可能なコリジョンとは異なり、オーバーラップ イベントは ReceiveBeginOverlapReceiveEndOverlap であり、こうした特定のケースでのみ発行します。

オーバーラップを起すためには、両方のアクタの [Generate Overlap Events] を有効にする必要があります。パフォーマンスのためです。球体またはボックスのいずれかを移動させた時に球体とボックスの両方をオーバーラップさせたい場合オーバーラップ クエリを行って、イベントの発行が必要かどうかを確認します。

移動した時にボックスはオーバーラップさせたくないのであれば、オーバーラップ クエリは行いません。ただし、球体とはオーバーラップできるので、球体はティックし、中に何かが移動するといけないので、各フレームのオーバーラップを照合する必要があります。

COL_overlapEvent.png

球体コリジョンのセットアップ

ウォール コリジョンのセットアップ

COL_OverlapEvent_Sphere.png

COL_collideOverLapEvent_Box.png

球体は WorldDynamic アクタ (ウォールと同様) を overlap するように設定され、何かをオーバーラップするときに自己のためにイベントを生成します。

ウォールは WorldDynamic であり、 PhysicsBody アクタ (これは球体を示します) を block するように設定されます。上記のように、両方のアクタが互いのオブジェクト タイプをブロックするように設定する必要があります。そうしないと、衝突しません。しかし、オーバーラップ はここで起こり、球体とボックスに対するイベントが発行されます。

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信