up:: Unreal_Engine
source:: Windows - アクターが壁を通過してしまう現象について|teratail
source:: オブジェクトチャンネルについて - 妹でもわかるUnrealEngine4
source:: コリジョン反応の参照 | Unreal Engine ドキュメント
source:: コリジョンの概要 | Unreal Engine ドキュメント
source:: Overlap Triggering Every Tick - UE4 AnswerHub

コリジョンの細かな設定

Preset、Object Channel、Trace Channelの三つでできている。
Object Channelは普段の衝突用。
Trace Channelはレイトレース用の特別Channel。
物体の持つChannelごとに衝突設定をするのがPreset。

より抽象的に言うなら、自分から見た物体の振る舞いがPreset。
他者から見た自分の振る舞いがChannel。

基本はPresetだけでいい。物体によって他の物体がどう振る舞うかは変わるだろうし。他者から見て固有の振る舞いをするのであればChannelを足せばいい。

実際の設定はProject Settings→Engine→Collisionと、Mesh設定のCollisionでできる。

詳細

Presetではまず自分のChannelを決め、そのうえで他のchannelに対してどう衝突したいかを設定する。これを物体ごとに割り当てることで衝突判定は行われている。

Object Channelを使うのは、新しいPresetを適用した物体に対し、固有の制御をしたくなった時。
例えば、弾にWorld Static ChannelのBullet Presetを割り当てたとして、互いに当たりたくないからとWorld StaticをIgnoreにすると、トリガーに引っかからなくなってしまう。
こんな時にBullet ChannelのBullet Presetにすれば、Bullet ChannelをIgnoreにするだけで互いのみ当たらなくなる。

他には、弾で弾けるような物体がある場合でも、敵のPresetでBullet ChannelをBlockにすれば設定できる。
ChannelはObject、Traceそれぞれで18個までしか設定できないので、できるだけ多くのものが同じ振る舞いをするようにしよう。
だからって最初からそうできると思うなよ! 失敗して学べ!

さらに細かい話

Overlap

Generate Overlap Eventsにチェックを入れていないと、OverlapとIgnoreは事実上同じ結果を返す。

Overlapは双方にGenerate Overlap EventsがないとOverlap判定が行われない。
つまり特性上片方だけでOverlap Eventを起こすという処理はできず、必ず双方でOverlap Eventは呼び出されている。(公式ドキュメントでパフォーマンスのためって書かれてるし、たぶん消す処理より両方起こしてしまう処理のほうが軽い)
OverlapでTickしたいならBool作ってEvent Tickに組み込めばいいんじゃないかな。

Block

物をBlockしたい場合は、両方がBlockでないとBlockできない。

Blockの場合は、Simulation Generates Hit Eventsにチェックを入れたほうにのみHit Eventを返す。

HitはTick、ぶつかっている間は毎フレーム処理を行う。