UnityユーザーのためのUEブループリント入門
コードとビジュアル両方のスクリプトを比較してゲームエンジンを学びます

16. 相互作用

相互作用(Interactions)とは、オブジェクト同士の衝突や重複の事象を総称したことを指しています。Unreal Engineのドキュメントから引用しています。Unityで相互作用と表現している資料はあまり見かけませんが、UEと比較するために使用します。
  • AB間の相互作用を決める条件
  • Collisionコンポーネント(コライダー)の「衝突」を発生させる
  • Collisionコンポーネント(コライダー)の「重複」を発生させる
  • AB間の応答タイプの相関性による相互作用から得られる情報
AとBのオブジェクトがあるとき、AからBへ衝突または重複のイベントを発生させたときに、A側が得られる情報と処理について考えます。
A->B
Aが受け取ることができる相互作用の情報について考えます。
🔗 参考リンク
Unreal Engineドキュメント
コリジョンの概要

16. 相互作用

16.1 AB間の相互作用を決める条件

Unityにおける応答タイプは、「衝突(Hit)」「重複(Trigger)」の2種類があります。
UnityにおいてAB間の相互作用を決める条件と、さらに応答タイプ「衝突」または応答タイプ「重複」が発生する条件をまとめました。RigidbodyコンポーネントとColliderコンポーネントの有無は、AB間の応答タイプの相関性から相互作用が発生する前提条件になっており、前提条件が揃ったゲームオブジェクトに対して「衝突」させるのか、「重複」させるのかを決めていきます。
1. AB間の相関性から相互作用(AB間の「衝突」・「重複」)が決まる条件
a. RigidbodyコンポーネントをAかBのどちらか、またはAB両方に追加すること
b. Colliderコンポーネントを両方に追加すること
2. 応答タイプ「衝突」が発生する条件
a. ColliderコンポーネントのIsTriggerがAB両方ともにOFFであること
「重複」はOnCollisionEnter/Exit関数で検出することができます。OnCollision関数あるCollisionクラスの引数collisonから相互作用の情報を受け取ることができます。
3. 応答タイプ「重複」が発生する条件
a. ColliderコンポーネントのIsTriggerが片方がONまたは両方がONであること
「衝突」はOnTriggerEnter/Exitで検出することができます。OnCollision関数あるCollisionクラスの引数collisonから相互作用の情報を受け取ることができます。
AB間の応答タイプの相関性の条件を揃えた上で、「衝突」または「重複」が発生する条件をまとめたマトリックス表は以下になります。
RigidbodyコンポーネントとColliderコンポーネントの有無についてマトリックス表でまとめた資料をネットでみかけましたが、情報が冗長になってしまうので、相互作用の条件は前提条件として分け、「衝突」と「重複」の違いに焦点を当てマトリックス表を作成したほうがよいと思います。
BゲームオブジェクトのCollisionコンポーネントのIsTrigger
ON OFF
AゲームオブジェクトのColliderコンポーネントのIsTrigger ON 「重複」 「重複」
OFF 「重複」 「衝突」
SphereAの子にSphereA'ゲームオブジェクトを追加します。SphereA'ゲームオブジェクトにはスクリプトを外しておきます。

16.2 コライダーの「衝突」を発生させる

それでは「衝突」を発生させます。シーン上に二つのSphereゲームオブジェクトを置いて、赤いSphereをSphereA、青いSphereをSphereBとします。SphereにはSphere Colliderコンポーネントが追加されていることと、ColliderコンポーネントのIsTriggerがデフォルトでOFFになっていることを確認します。SphereAゲームオブジェクトにRigidbodyコンポーネントを追加します。
Physic Materialを作成します。名前をBounceにします。
SphereAとSphereBのスクリプトを用意します。
SphereAゲームオブジェクト用のObjectAコンポーネントを用意します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectA : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("Object Collision A: " + collision.gameObject.name);
    }
}
SphereBゲームオブジェクト用のObjectBコンポーネントを用意します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectB : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("Object Collision B: " + collision.gameObject.name);
    }
}
ObjectAコンポーネントとObjectBコンポーネントをそれぞれのゲームオブジェクトに追加して、先ほど作成したBounce Physic materialを追加します。
SphereAのインスペクタです。
SphereBのインスペクタです。
playを実行して、SphereAゲームオブジェクトをマウスで選択して、SphereBゲームオブジェクトに向かって移動させます。
SphereAからSphereBへの衝突のイベントについて、両方が「衝突」を検知していることがわかります。
次に、SphereAの子のゲームオブジェクトSphereA'とSphereBとの「衝突」について考えます。
SphereA'を追加したSphereAの位置を上に移動させ、SphereA'とSphereBをぶつけたときの相互作用を確認します。
SphereA'にはRigidbodyコンポーネントは外し、Sphere ColliderコンポーネントのIsTriggerはOFFにします。
  • SphereA(親)
    • Transformコンポーネント
    • Sphere(MeshFilter)コンポーネント
    • Mesh Rendererコンポーネント
    • Sphere Colliderコンポーネント
      • IsTrigger OFF
    • Rigidbodyコンポーネント
    • ObjectAコンポーネント
    • Sphere A'(子)
      • Transformコンポーネント
      • Sphere(MeshFilter)コンポーネント
      • Mesh Rendererコンポーネント
      • Sphere Colliderコンポーネント
        • IsTrigger OFF
  • SphereB
    • Transformコンポーネント
    • Sphere(MeshFilter)コンポーネント
    • Mesh Rendererコンポーネント
    • Sphere Colliderコンポーネント
      • IsTrigger OFF
    • Rigidbodyコンポーネント
    • ObjectBコンポーネント
Playを実行して、SphereA'がSphereBと「衝突」したときに、親となるSphereAのObjectAコンポーネントにSphereBの名前が表示されていることがわかります。
ちなみにSphereA'にRigidbodyコンポーネントを追加すると、SphereA'がSphereBと衝突したときは、親となるSphereAが子のSphereA'の「衝突」を検知しなくなり、SphereBはSphereA'の「衝突」を検知するようになります。
相手との「衝突」をレイヤーによって有効にするかを判定することができるRaycasts Hit Triggers機能を確認します。
SphereAの親子関係のSphereA'を削除して、シーン上にSphereAとSphereBについて、SphereBを上に、SphereAを下に設置します。
Layerに新しく値を追加します。
インスペクタのLayerをクリックしてAdd Layer...をクリックします。
User Layer 7 に新しくSphereを登録します。
さらにUser Layer 8 に新しくPlaneを登録します。
SphereAのインスペクタです。LayerはDefalutのままにします。
SphereBのインスペクタです。LayerはSphereに変更します。
Planeのインスペクタです。LayerはPlaneに変更します。
次にEdit > Project Settings >PhysicsでRaycasts Hit Triggersを表示してDefaultとSphereの交差点のチェックを外します。
playを実行すると、LayerがSphereのSphereAが落下すると、LayerがDefaultのSphereBは無視して、Planeと衝突して着地していることが確認できます。

16.3 コライダーの「重複」を発生させる

「衝突」で使用したシーン上の二つのSphereゲームオブジェクトを使います。このままですとPlayを実行したときにRigidbodyコンポーネントの働きでPlaneの下にすり抜けてしまい、SphereBとの相互作用が確認できなくなってしまうためSphereAはSphereBの上に移動させておきます。SphereAにあるBox ColliderコンポーネントのIsTriggerをONにします。SphereAゲームオブジェクトにRigidbodyコンポーネントが追加されていることを確認します。
ObjectAとObjectBのスクリプトを書き換えます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectA : MonoBehaviour
{
    void OnTriggerEnter(Collision collision)
    {
        Debug.Log("Object Trigger A: " + collision.gameObject.name);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectB : MonoBehaviour
{
    void OnTriggerEnter(Collision collision)
    {
        Debug.Log("Object Trigger B: " + collision.gameObject.name);
    }
}
SphereAのインスペクタです。
SphereBのインスペクタです。
playを実行すると、SphereAゲームオブジェクトが落下します。
SphereAからSphereBへの「重複」のイベントについて、両方が「重複」の相互作用が働いていることが確認できます。Planeに対しても「重複」の相互作用が働きました。
それからスクリプト側で以下のようにOnTriggerEnterとOnCollisionEnterの両方を記述しても、インスペクタで設定した「衝突」または「重複」のどちらかの条件に従ってOnTriggerEnterとOnCollisionEnterのどちらかが呼ばれます。両方が呼ばれることはありません。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectA : MonoBehaviour
{
    void OnTriggerEnter(Collision collision)
    {
        Debug.Log("Object Trigger A: " + collision.gameObject.name);
    }
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("Object Collision A: " + collision.gameObject.name);
    }
}
次に、SphereAの子のゲームオブジェクトSphereA'とSphereBとの「重複」について考えます。
SphereA'にはRigidbodyコンポーネントは外し、Sphere ColliderコンポーネントのIsTriggerはONにします。
  • SphereA(親)
    • Transformコンポーネント
    • Sphere(MeshFilter)コンポーネント
    • Mesh Rendererコンポーネント
    • Sphere Colliderコンポーネント
      • IsTrigger OFF
    • Rigidbodyコンポーネント
    • ObjectAコンポーネント
    • Sphere A'(子)
      • Transformコンポーネント
      • Sphere(MeshFilter)コンポーネント
      • Mesh Rendererコンポーネント
      • Sphere Colliderコンポーネント
        • IsTrigger ON
  • SphereB
    • Transformコンポーネント
    • Sphere(MeshFilter)コンポーネント
    • Mesh Rendererコンポーネント
    • Sphere Colliderコンポーネント
      • IsTrigger OFF
    • Rigidbodyコンポーネント
    • ObjectBコンポーネント
Playを実行して、SphereA'がSphereBと「重複」したときに、親となるSphereAのObjectAコンポーネントにSphereBの名前が表示されていることがわかります。
ちなみにSphereA'にRigidbodyコンポーネントを追加すると、SphereA'がSphereBと「重複」したときは、親となるSphereAが子のSphereA'の「重複」を検知しなくなり、SphereBはSphereA'の「重複」を検知するようになります。

16.4 AB間の応答タイプの相関性による相互作用から得られる情報

「重複」や「重複」を発生させる際に作成したスクリプトでは、相手のゲームオブジェクトの名前を取得して表示させていましたが、他にも取得できる情報があります。この情報はUnityのドキュメントにも記載されています。
  • 「衝突」時のUnity Collisionクラスから受け取ることができる相互作用の情報
    • Collisionで取得できる情報
      • collider ヒットした相手のCollider情報
      • contactsCount 物理エンジンによる生成された衝突情報
      • contacts 物理エンジンによって生成された接触点
      • gameObject ヒットした相手のGameObject情報
      • impulse 衝突を解消するために互いの接触に適用されるインパルス
      • relativeVelocity 衝突した2つのオブジェクトの相対速度
      • rigidbody ヒットした相手のRigidbody情報
      • transform ヒットした相手のTransform情報
  • 「重複」時のUnity Colliderクラスから受け取ることができる相互作用の情報
    • Colliderで取得できる情報
      • gameObject 重複した相手のGameObject情報
      • tag GameObjectのタグ
      • transform 重複した相手のTraosnfom情報
      • name GameObjectのオブジェクト名
🔗 参考リンク
Unity Documentation
Collision
🔗 参考リンク
Unity Documentation
Collider

16. 相互作用

相互作用とは、あるオブジェクトから別のオブジェクトにぶつかったときに、あるオブジェクトと別のオブジェクトに作用を与え、それぞれのオフジェクトに反応を発生させることを指します。これはUnity、UE共にその機能が用意されているゲームエンジンの基本的で、且つ普遍的な機能と言えます。ただ作用の発生のさせ方とその反応から得られる情報が異なります。

16.1 AB間の相互作用を決める条件

1. AB間の応答タイプの相関性から相互作用(AB間の「衝突」・「重複」)が決まる条件
a. Collisionコンポーネントを両方に追加すること
UEにおける応答タイプは、「衝突(Block)」「重複(Overlap)」「無視(Ignore)」の3種類があります。
UEにおいてAB間に相互作用が決まる条件させるには、Collisionコンポーネントが追加されたアクタでオブジェクトチャンネルを決めます。UnityではAB間の相互作用は、Rigidbodyコンポーネントの有無とColliderコンポーネントのIstriggerの値で決まりましたが、UEではA側のオブジェクトチャンネルと相手のオブジェクトチャンネルへの応答タイプをマトリックスで設定します。
オブジェクトチャンネルは、オブジェクトタイプとも表現されており、ここではまとめてオブジェクトチャンネルに用語を合わせてます。オブジェクトチャンネルとは、アクターに追加されたCollisionコンポーネントで決められた、オブジェクト(=Collisionコンポーネントを持ったアクター、以降はオブジェクトと表現します)の応答タイプに関する性質を示すものです。あるオブジェクトが相手とのオブジェクトとの応答タイプを決定するために、自分と相手のオブジェクトタイプの応答タイプに関するマトリックスで確認して、それぞれのオブジェクトに反応を発生させます。
そして、オブジェクトチャンネルにはプリセットと呼ばれる、UEがあらかじめ用意したオブジェクトの応答タイプに関する性質がいくつか定義されています。以下の表はプリセットから代表的なものをピックアップしています。選択リストのすべての項目についてより詳しい説明を知りたい場合は公式のドキュメント「コリジョン反応のリファレンス」を参照ください。
Default スタティックメッシュ エディタのスタティックメッシュに適用される設定値を使用します。
NoCollision コリジョンを無効にします WorldStatic
BlockAll すべてのアクタをブロックします WorldStatic
OverlapAll すべてのアクタをオーバーラップします WorldStatic
BlockAllDynamic デフォルトでMovableに設定されたすべてアクタをブロックします WorldDynamic
OverlapAllDynamic デフォルトでMovableに設定されたすべてのアクタをオーバーラップします WorldDynamic
Pawn ポーンオブジェクト Pawn
Custom Project Settings>Collisionで設定した独自のコリジョンのオブジェクトチャンネルを使用するときに使います
Customについては、第5章の5.12. 動く床にて「落ちる床が敵に当たると、敵の頭上に乗ったままにの状態から、落ちる床が敵をすり抜けて下に落ちる方法」で実際に使います。
🔗 参考リンク
Unreal Engine ドキュメント
コリジョン反応のリファレンス
1. 応答タイプ「衝突」が発生する条件
a. CollisionコンポーネントのPhysicsのSimulate PhysicsをAかBのどちらか、またはAB両方にチェックすること
b. Hitイベントを発生させたい側はCollisionコンポーネントのSimulation Generates Hit Eventsにチェックすること
c. AのBへのオブジェクトチャンネルの応答タイプとBのAへのオブジェクトタイプの応答タイプが両方ともBlockになっていること
「衝突」はHitイベントノードで検出することができます。Hitイベントノードの各種ピンから相互作用の情報を受け取ることができます。
2. 応答タイプ「重複」が発生する条件
a. AB両方にCollisionコンポーネントのGenerate Overlap Events にチェックすること、
b. Aの、Bへのオブジェクトチャンネルの応答タイプまたはBの、Aへのオブジェクトタイプの応答タイプのどちらかがIgnoreでないことと、どちらかがOverlapになっていること
「重複」はActorまたはComponent Begin/End Overlapイベントノードで検出することができます。ActorまたはComponent Begin/End Overlapイベントノードの各種ピンから相互作用の情報を受け取ることができます。。
3. 応答タイプ「重複」が発生する条件(Actor Begin Overlapイベントノード)
a. Aのオブジェクトチャンネルの応答タイプまたはBのオブジェクトタイプの応答タイプがOverlapになっていること
「衝突」「重複」は、第5章の実践編 2Dアクションゲームの作成で実際に2Dアクションゲームを作るときに事例をふまえてたくさん使用します。
🔗 参考リンク
SlideShare Tatsuya Iwama
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
BアクターのAアクターのオブジェクトチャンネルに対する応答タイプ
Ignore Overlap Block
AアクターのBアクターのオブジェクトチャンネルに対する応答タイプ Ignore 無視 無視 無視
Overlap 無視 重複 重複
Block 無視 重複 衝突

16.2 Collisionコンポーネントの「衝突」を発生させる

それでは「衝突」を発生させます。コンテンツブラウザで二つのアクタを作成します。SphereAアクタは赤色、SphereBアクタは青色にします。
両方のSphereにはSphere Static Meshコンポーネントを追加します。Sphere Static MeshコンポーネントにはPhysicsとCollisionの両方の機能が使うことができますので、これらを利用します。
SphereAのComponentsパネル
SphereBのComponentsパネル
SphereBのSphere Static MeshコンポーネントのPhysicsのSimulate Physicsにチェックします。
AのBへのオブジェクトチャンネルの応答タイプとBのAへのオブジェクトタイプの応答タイプが両方ともBlockになっていることが必要になるので、AB両方のプリセットをBlock All Dynamicに設定します。Block All Dynamicに設定すると、A側のオブジェクトチャンネルがデフォルトでWorldDynamicに設定され、相手のオブジェクト応答タイプがWorldDynamicの場合はBlockに設定されていることを確認します。
A側のSphere Static MeshコンポーネントのCollisionのSimulation Generates Hit Eventsにチェックします。
B側のSphere Static MeshコンポーネントのCollisionのSimulation Generates Hit Eventsにもチェックします。
SphereAアクタのブループリントを書きます。
UEの場合はplayを実行している最中にアクターを選択してマウスで動かす操作はデフォルトでは用意されていないので、Tickイベントノードを使ってSphereAをSphereBがある方向へ動かすようにします。
SphereBアクタのブループリントを書きます。
SphereAとSphereBにそれぞれ赤色と青色のマテリアルを追加しておきます。
playを実行して、SphereBはFloorにも反応していますが、SphereAとSphereBとの相互作用について、両方が「衝突」を検知していることがわかります。

子のアクターの「衝突」について

次に、SphereAの子のSphereA’アクタとSphereBとの「衝突」について考えます。
Unityのときと同じくSphereA’を追加したSphereAの位置を上に移動させ、SphereA’とSphereBをぶつけたときの相互作用を確認します。
SphereAの子にSphere Static Meshコンポーネントを追加します。SphereAの横になるようにSphereA'(図ではSphere1)を移動します。SphereA'はピンク色のマテリアルを追加しておきます。
SphereA'のSphere Static MeshコンポーネントのPhysicsのSimulate Physicsのチェックを外し、CollisionのSimulation Generates Hit Eventsのチェックも外します。
Playを実行して、SphereA’がSphereBと「衝突」したときに、親となるSphereAのObjectAコンポーネントにはSphereBの名前が表示されないことを確認します。
ちなみに、SphereA'のSphere Static MeshコンポーネントのPhysicsのSimulate Physicsのチェックを追加した場合は、SphereA'自身が物理演算を持ち、「衝突」時にSphereAとは連動しない挙動が発生します。
CollisionのSimulation Generates Hit Eventsのチェックを追加した場合、SphereA'自身の「衝突」の相互作用を得ることができるので、Hitイベントノードで処理を記述することができます。
SphereAのブループリントでSphereBに近づくために記述したTickイベントノードは、Simulate Physicsにチェックした場合は、Set Actor Locationに対してLocation Yに対して値を追加していく処理は無視されます。
今度はSphereAのSimulate Physicsにチェックが入っていない状態でSphereA'の「衝突」について確認します。
SphereAのSphere Static MeshコンポーネントのPhysicsのSimulate Physicsのチェックを外して、SphereA'のStatic MeshコンポーネントのPhysicsのSimulate Physicsのチェックも外して、Simulation Generates Hit Eventsのチェックも外した状態で、SphereBの横に並べます。
playを実行すると、SphereA'の親となるSphereAのObjectAコンポーネントにはSphereBの名前が表示されないことを確認します。
さらにSphereA'のSimulation Generates Hit Eventsのチェックをいれた状態にします。
SphereA'のHitイベントノードは、先ほど使用した相手のアクターのディスプレィ名を表示する処理を記述した状態でplayを実行すると、Simulate Physicsにチェックがない状態でもSphereA'のHitイベントノードが働いて、「衝突」した相手のSphereBの情報を取得することができます。これはどちらかのオブジェクトにSimulate Physicsが入っていれば、子のオブジェクトでも相互作用が働き、相手の情報を得ることができることを意味しています。 +
また、UEはUnityの場合と異なり、結果的には親のイベントも子のイベントも同じアクターのブループリント上で記述することになりますが、子が発生した相互作用は親ではなく子のHitイベントとして処理を記述することができます。

16.3 Collisionコンポーネントの「重複」を発生させる

「衝突」で使用したレベル上の二つのSphereゲームオブジェクトを使います。
SphereA、SphereBのSphere Static MeshコンポーネントのPhysicsのSimulate Physicsにチェックが入っている場合は両方とも外します。
AのBへのオブジェクトチャンネルの応答タイプとBのAへのオブジェクトタイプの応答タイプのどちらかがOverlapになっていれば「重複」できるのですが、ここではAB両方のプリセットをOverlap All Dynamicに設定します。Overlap All Dynamicに設定すると、Block All Dynamicに設定したときと同様にA側のオブジェクトチャンネルがデフォルトでWorldDynamicに設定され、相手のオブジェクト応答タイプがWorldDynamicの場合はOverlapに設定されていることを確認します。
A側のSphere Static MeshコンポーネントのCollisionのSimulation Generates Hit Eventsのチェックを外し、Generate Overlap Eventsにチェックを入れます。
B側のSphere Static MeshコンポーネントもCollisionのSimulation Generates Hit Eventsのチェックを外し、Generate Overlap Eventsにチェックを入れます。「衝突」と異なり、Generate Overlap Eventsは両方にチェックしないと「重複」が発生しない点に注意が必要です。
SphereAアクタのブループリントを書きます。
SphereBアクタのブループリントを書きます。
playを実行すると、SphereAアクターがSphereBに近づいて「重複」すると相互作用が働くことが確認できます。
次に、SphereAの子のアクターのSphereA'とSphereBとの「重複」について考えます。
SphereAの子にSphere Static Meshコンポーネントを追加します。子の「衝突」で作成したときと同様に、SphereAの右横になるようにSphereA'(図ではSphere1)を移動します。SphereA’はピンク色のマテリアルを追加しておきます。
SphereA’のSphere Static MeshコンポーネントのCollisionのSimulation Generates Hit Eventsのチェックを外します。Generate Overlap Eventsにチェックを入れます。プリセットはOverlap All Dynamicを選択します。
SphereA’に関するブループリントを記述します。
Playを実行して、SphereA’がSphereBと「重複」したときに、子のアクターとして「重複」が働くことが確認できます。
今度はSphereA'のCollisionのGenerate Overlap Eventsのチェックを外します。
AB両方にGenerate Overlap Eventsは両方にチェックしないと「重複」が発生しないので、子のアクターとして「重複」が働かないことが確認できます。
今度はスクリプト側でSimulation Generates Hit EventsとGenerate Overlap Eventsの両方をチェックしたときの相互作用の挙動を確認します。SphereA側にSimulate Physicsを付けますので、SphereBの上に移動させます。SphereAの子として追加したSphereA'は削除します。
SphereAのSimulate Physicsにチェックを入れます。
SphereBのSimnulate Physicsのチェックは外します。
次にSphereAのCollisionは、Simnulation Generaes Hit EventsとGenerate Overlap Eventsの両方にチェックを入れます。オブジェクトチャンネルはBlock All Dynamicに設定します。
SphereBのCollisionは、Simnulation Generaes Hit EventsとGenerate Overlap Eventsの両方にチェックを入れます。オブジェクトチャンネルはOverlap All Dynamicに設定します。
SphereAのブループリントを記述します。
SphereAのブループリントを記述します。
設定が完了したら、本来は応答タイプがSphereAのオブジェクトチャンネルがWorld Dynamicのとき相手がWorld DynamicはBlockで、SphereBのオブジェクトチャンネルがWorld Dynamincのとき相手がWorld DynamicはOverlapになり、「重複」の相互作用が発生するはずです。
BアクターのAアクターのオブジェクトチャンネルに対する応答タイプ
Ignore Overlap Block
AアクターのBアクターのオブジェクトチャンネルに対する応答タイプ Ignore 無視 無視 無視
Overlap 無視 重複 重複
Block 無視 重複 衝突
playを実行して確認してみます。
SphereAはSphereBとは「重複」の相互作用が働きましたが、Floorとも「衝突」の相互作用も働きました。

アクタの「重複」(Actor Begin Overlapイベントノード)

WorldDynamicとは、TransformのMobilityがMovableなアクタのことを指し、WorldStaticは、Staticなアクタのことを指します。Sphereが
🔗 参考リンク
Unreal Engine ドキュメント
カスタム仕様のオブジェクト タイプをプロジェクトに追加する

16.4 AB間の応答タイプの相関性による相互作用から得られる情報

応答タイプが「衝突」のときのHitイベントノードから受け取ることができる相互作用の情報は以下のとおりです。
1. Hitイベントノード
My Comp PrimitiveComponent - ヒットされた実行中のアクタ上のコンポーネント。
Other Actor - コリジョンに関わるもう一方のアクタ。
Other Comp PrimitiveComponent - ヒットされたコリジョンに関わるもう一方のアクタ上のコンポーネント。
Self Moved Boolean - 別のオブジェクトの移動からヒットを受けた際に使用し (false の場合)、Hit Normal と Hit Impact を調整して、ヒット対象となったオブジェクトに対するもう一方のオブジェクトからの力を示します。
Hit Location Vector - 衝突する 2 つのアクタ間のコンタクト位置。
Hit Normal Vector - コリジョンの方向です。
Normal Impulse Vector - アクタが衝突する力。
Hit Struct Hit 内に収集されたすべてのデータである HitResult を引っ張り出し、この結果を「細分化して」個々のデータへのアクセスすることができます。
🔗 参考リンク
Unreal Engine ドキュメント
イベント
応答タイプが「重複」のOverlapイベントノードから取得できる相互作用の情報は以下のとおりです。
2. Actor Begin/End Overlapイベントノード
a. Actor ID
b. Tag
3. On Component Hitイベントノード
a. Hit Component
b. Other Actor
c. Other Comp
d. Normal Impulse
4. On Component Begin Overlapイベントノード
a. Overlap Component
b. Other Actor
(1) Actor
(2) Tag
c. Other Comp
d. Other Body Index
e. From Sweep
f. Sweep Result
5. On Component End Overlapイベントノード
a. Overlapped Component(Cast)
b. Other Actor
(1) Actor
(2) Tag
c. Other Comp
d. Other Body Index