UE5のコリジョン設定について
UE5でのゲーム制作ではアクタ同士が触れあった際に「ぶつかる」、「すり抜ける」といったコリジョン(衝突判定)を作る必要がある。
コリジョン設定について、今回の記事ではサードパーソンのテンプレートを使って解説していく。
UE5のコリジョン設定の目次
コリジョンとはスケルタルメッシュとスタティックメッシュ
コリジョン設定
コリジョンプリセットがDefaultの場合
Simulate Physics
目次にもどる
UE5のコリジョンとは
UE5のコリジョンはメッシュ(3Dモデル)に衝突判定を作るのに使われる。
サードパーソンのテンプレートでゲームを再生してみよう。
キャラが床の上に立ち、移動して壁やCubeにぶつかるとすり抜けずにぶつかる。
.jpg)
キャラ・壁・Cubeといったメッシュ(3Dモデル)を覆うような形でコリジョン設定が行われているおかげだ。
実際に確認してみよう。
コンテンツドロワーのAll→コンテンツ→ThirdPerson→BlueprintsのフォルダにあるBP_ThirdPersonCharacterのブループリントをビューポードにドラッグ&ドロップしよう。これでキャラをレベル上に追加できる。
.jpg)
そして、「表示」→「コリジョン」の項目に✓を入れてみる。
.jpg)
BP_ThirdPersonCharacterの3Dモデルのコリジョンが可視化される。
.jpg)
「内側にある緑色の線」と「外側にあるグレーの線」の2つのコリジョンがあることが確認できる。環境によって違う色で出るかもしれないけど、内側と外側の2種類コリジョンがあることがわかればOK。
また障害物や壁なども観察してみよう。
.jpg)
「紫の線」のコリジョンがあることが確認できる(コリジョンは1種類)。
ゲーム制作していく中で、様々な素材アセットをダウンロードしゲーム内に入れて使用していくことになる。
これらの素材には最初からコリジョン設定が行われていることが多い(時々、自分で設定しなければならない場合もあるが・・)。
目次にもどるスケルタルメッシュとスタティックメッシュ
UE5のメッシュ(3Dモデル)は以下の2つに分類できる。
スケルタルメッシュ
アニメーションが行うために内部に骨が入っているメッシュのこと。歩く・攻撃する・ジャンプするといったアニメーションを行うことが可能。
人間やモンスターなどのキャラはスケルタルメッシュとなっている。
スタティックメッシュ
骨が入っていないメッシュのこと。歩く・攻撃する・ジャンプするといったアニメーションが行えない。
壁・床・箱・机・椅子といった障害物にはアニメーションの必要がないため、スタティックメッシュで作られている。
後述するが、メッシュによってはコリジョン設定されている場所が異なる場合もあるので注意しよう。
目次にもどるコリジョン設定
レベル上のキャラ(先ほど作ったBP_ThirdPersonCharacterでOK)を選択して詳細ビューのコリジョンの項目をみれば設定を確認することができる。
.jpg)
最初からいくつかのコリジョンプリセットが用意されている。BP_ThirdPersonCharacterの場合はコリジョンプリセットがCharacterMeshになっている。
注目したいのはすぐ下の「Collision Enabled」と「Object Type」と「コリジョンレスポンス」。選ばれているコリジョンプリセットによってこの3つが異なってくる。
.jpg)
「Collision Enabled」で他のアクタのコリジョンを検知するかを選択できる。選択肢は以下の通り。
No Collision
他のアクタのコリジョンを検知しない。衝突しても何も起こらない。
Physics Only
物理的に動くアクタに対して、コリジョンを検知。
Collision Enabled
空間クエリと物理的に動くアクタに対して、コリジョンを検知。
Probe Only
物理的に動くアクタのコリジョンを検知。だが衝突の物理的な挙動は検知しない。
Query and Probe
空間クエリと物理的に動くアクタのコリジョンを検知する。衝突の物理的な挙動は検知しない。
「Object Type」で自身のオブジェクトタイプを指定できる。選択肢は以下の通り。
WorldStatic
移動しないアクタに使用。例えば壁・床・棚など。
WorldDynamic
アニメーション・物体の運動などで移動する可能性があるアクタに使用。例えばトラップ・ドア・宝箱など。
Pawn
操作するプレイヤーなどに使用。
Vehicle
車両に使用。
Destructible
破壊不能のアクタに使用。
「コリジョンレスポンス」ではコリジョンを検知した時の反応を設定できる。
選択肢は以下の3つ。
無視する(Ignore)
他のアクタと接触した際にすり抜ける。検知もしない。
オーバーラップ(Overlap)
他アクタと接触した際にすり抜ける。衝突したことは検知。
衝突したアクタのコリジョンレスポンスが「オーバーラップ」または「ブロック」になっていた場合はOverlap Eventを発生させることができる。
ブロック(Block)
他アクタと接触した際にぶつかる。衝突したことを検知。
衝突したのを検知するHit Eventを発生させることが可能だ。
同様にその下でコリジョンレスポンスの細かい設定が可能。
「トレース反応」ではカメラやライントレースに対する反応を設定。
「オブジェクト応答」ではObject Typeに対する反応を設定。
BP_ThirdPersonCharacterのコリジョンプリセットが「CharacterMesh」なのを確認してほしい。これは内側のコリジョンである。
.jpg)
BP_ThirdPersonCharacterの子要素のコンポーネント(部品)としてCapsule Componentがある。これを選択して詳細ビューを確認するとコリジョンプリセットはPawnである。外側のコリジョンだ。
.jpg)
一時的にCapsule ComponentのコリジョンプリセットをOverlapAll(その名の通り、コリジョンレスポンスは全てオーバーラップ)に変えてみる。
ゲームを再生すると、床をすり抜けてBP_ThirdPersonCharacterが落ちていくのを確認できる(再生後すぐなので、開始時に操作キャラから見れる位置にBP_ThirdPersonCharacterを配置しよう)。
.jpg)
次にCapsule Componentのコリジョンプリセットを元に戻し、内側にあるBP_ThirdPersonCharacter自体のコリジョンを一時的にCharacterMesh→OverlapAllに変えてみよう。
再生しても、すり抜けは発生しない。外側にCapsule Componentのコリジョンがあるためである。
目次にもどるコリジョンプリセットがDefaultの場合
スタティックメッシュのアクタの場合、コリジョンプリセットがdefaultとなっている場合がある。
例えばコンテンツドロワーのスターターコンテンツのPropsフォルダからSM_CornerFrameをドラッグ&ドロップしてレベル上に配置しよう。
.jpg)
スターターコンテンツがなく、追加方法がわからない場合は以下の記事を確認してほしい。
スターターコンテンツの追加このコンテナのアクタを選択して詳細ビューをみてみよう。コリジョンプリセットはdefault。下にコリジョン設定を行うための項目も存在しない。

だが、ゲームを再生すると操作キャラの足をコンテナに乗せることが可能。コリジョン設定は行われている(ただし厳密には足を乗せられるのは別の設定も絡んでいる。それは別記事で紹介するかもしれない)。
.jpg)
実はdefaultの場合はスタティックメッシュ側に設定されているコリジョン設定を使うことになるのだ。
コンテナのアクタを選択し詳細ビューのスタティックメッシュの項目を確認すると以下のマークがある。
.jpg)
このマークを押すとこのアクタに使われているスタティックメッシュを検索可能。検索でSM_CornerFrameが出てくるのでダブルクリック。
開いた画面の詳細ビューのコリジョンプリセットは「BlockAll」。その名の通りコリジョンレスポンスは全てブロックとなっている。よって、キャラの足とコンテナがぶつかり、足を乗せることができたのだ。

Simulate Physics
Simulate Physicsにチェックをつけることで、コリジョンで衝突が起きた際にアクタが物理的に動けるようになる。
先ほど使用したコンテナのアクタを選択して詳細ビューの物理の項目にあるSimulate Physicsにチェックを入れてみよう。
.jpg)
この状態で再生して操作キャラでコンテナに触れてみると、サッカーボールのように吹っ飛んでいくのが確認できる。
.jpg)