52.コリジョンプリセットとは?① 他アクタへの衝突設定を確認しよう
コリジョンプリセットとは?
コリジョンプリセットとはアクタの詳細にある「コリジョンプリセット」の設定項目の事で、別のアクタのコリジョンに対してどのように衝突するのか設定できる項目です。コリジョンプリセットのイメージです↓
https://scrapbox.io/files/65c6fb68447bf80024148ffb.png
コリジョンプリセットは詳細の以下の場所でアクタ毎に設定する事ができます。
https://scrapbox.io/files/65c6fb8f73a5a20025f30e93.jpg
コリジョンプリセットを正しく設定する事で、アクタ同士の衝突を意図した結果にさせる事ができます。
😺また後ページで紹介するブループリントでの衝突時の処理でも、コリジョンプリセットを正しく設定する必要があるのでこのコリジョンプリセットはしっかり理解していきましょう!ではコリジョンプリセットがどんなものか今回は解説していきます。
①コリジョンプリセットを確認してみよう
まずはアクタを四つ用意してコリジョンプリセットをそれぞれセットしていきま、衝突結果がどうなるのか確認していきます。
プロジェクトはスターターコンテンツを含めたサードパーソンテンプレートプロジェクトで行います。
https://scrapbox.io/files/65c6fbbee0b46500257d306a.jpg
まずはStaterContents > Props > SM_TableRoundをレベルに追加します。
https://scrapbox.io/files/65c6fbd2f551110025e6894c.jpg
表示 > コリジョンを選択してコリジョンを可視化しましょう。
https://scrapbox.io/files/65c6fbea779c760025b25eab.jpg
テーブルのコリジョンが見えるようになりました。
テーブルのコリジョンを確認してみよう
前回のページ「メッシュにコリジョンを追加してみよう」で確認した通り、元となるスタティックメッシュのアセット「SM_TableRound」を開くとスタティックメッシュエディタが開きます。ここでメッシュのコリジョンを追加したり,削除したりの編集が可能です。
https://scrapbox.io/files/65c6fc10c35a9d002483869d.jpg
今回はデフォルトの状態のコリジョンで進めていきます。
ではこのレベルに出したテーブルのアクタの詳細からコリジョン > コリジョンプリセットを確認してみましょう。Defaultになっているのが確認できます。
https://scrapbox.io/files/65c6fc3a8fdc16002e09569c.jpg
ではこのレベルに出したテーブルのアクタの詳細からコリジョン > コリジョンプリセットを確認してみましょう。Defaultになっているのが確認できます。
Defaultとは?
Defaultのコリジョンプリセットは基本的に他のアクタと衝突するという設定です。なのでこのコリジョンプリセット「Default」をセットしてあるアクタは基本的に衝突するという事になります。後から詳しく解説していきます。
試しにプレイしてみましょう。現在の状態ではテーブルのアクタとプレイヤーは衝突するのが確認できます。
https://scrapbox.io/files/65c6fc8c669a980025065b4c.gif
テーブルのアクタのコリジョンとプレイヤーが衝突するのは、テーブルにはコリジョンが付いており、「Default」という他のアクタと衝突を行うコリジョンプリセットが設定されているため、アクタ同士は衝突するという事になります。
②色々なコリジョンプリセットを試してみよう
では今度は他のコリジョンプリセットを試してみて衝突判定がどのようになるのか確認してみます。
テーブルのアクタをAlt押しながら移動で複製します。計四つ配置します。
https://scrapbox.io/files/65c6fcd65fcbba0024da5de1.gif
右から二つ目のテーブルを選択して、コリジョンの項目からコリジョンプリセットをNoCollision(衝突なし)にします。
同じように右から三つ目のテーブルの詳細からコリジョンプリセットををBlockAll(衝突する)、四つ目をOverlapAll(衝突しないが重なりを検知する)にします。
https://scrapbox.io/files/65c6fd0e8c38f400261ce45a.jpg
一旦プレイして確認してみましょう。衝突するテーブルと衝突しないテーブルがある事が確認できます。
https://scrapbox.io/files/65c6fd2a39097500247dfb60.gif
こんな感じにコリジョンプリセットを使用してアクタが衝突するかしないかの判定を切り替える事ができます。では設定したコリジョンプリセットの詳細について見ていきましょう。
デフォルトで用意されているコリジョンプリセットの主な種類
デフォルトで用意されているコリジョンプリセットがどのように衝突するのか簡単に紹介します。
Default
デフォルトの状態のアクタは基本的にこの「Default」コリジョンプリセットになります。Defaultに設定されているアクタは元のアセットのメッシュのコリジョンプリセットに応じて変更されます。デフォルトの状態だとメッシュのコリジョンプリセットはBlockAllなのでBlockAllが適用される形になります。つまり、基本的に他のアクタと衝突するコリジョンプリセットになります。
NoCollsion
コリジョン無しの状態になります。つまりコリジョンが無いため他のアクタとは衝突しません。パフォーマンスが最も良いです。コリジョンが必要無い場合にはこの項目にしましょう。
BlockAll
他のアクタと衝突するコリジョンプリセットになります。
OverlapAll
他のコリジョンと衝突はしませんが、重なりを検知するようになります。このOverlapAllはブループリントでアクタ同士が重なった時に処理を実行できるようにするための設定です。なので衝突はさせないがブループリントで重なりを検知して処理を実行させたい時にこのコリジョンプリセットを選択します。UnityでいうところのIs Triggerにチェックをつけた状態のオブジェクトがOn Trigger Enterを持つオブジェクトに検知されることと同義だと考えてください。
③コリジョンプリセットの詳細設定を確認してみよう
ではここまでにセットしたコリジョンプリセットですが、実はこれらのコリジョンプリセットは自身で作成する事ができます。そしてBlockAllやNoCollisionなどのコリジョンプリセットは既に作られたものになっています。これらの既に作られたコリジョンプリセットの詳細を確認していきましょう。
https://scrapbox.io/files/65c6fec7c35a9d00248392c0.jpg
エディタ右上の設定からプロジェクト設定を開きます。
https://scrapbox.io/files/65c6fedf5fcbba0024da6853.jpg
エンジン > Collision > Presetを開きます。
https://scrapbox.io/files/65c6ff0a4532f80025dd0f02.jpg
コリジョンプリセットはPresetで作成,編集,確認できる
コリジョンプリセットはこの開いた項目で作成したり編集したり,確認したりする事ができます。
https://scrapbox.io/files/65c6ff32779c760025b26ce5.jpg
ここに先ほどコリジョンプリセットで設定したNoCollsionだったり、BlockAll、OverLapなど(Defaultを除く)のコリジョンプリセットがある事が確認できます。
例えば上から二番目のBlockAllをダブルクリックで開きます。するとコリジョンプリセットの設定が開きます。
https://scrapbox.io/files/65c6ff69fd501d0023620696.jpg
このコリジョンプリセットの設定項目ではコリジョンが他のコリジョンに対してどのように衝突するのかの詳細設定を行う事ができます。
コリジョンプリセットの設定項目を解説していきます
ではこのコリジョンプリセットの詳細設定「プロファイルを編集」ウィンドウについて解説していきます。BlockAllのコリジョンプリセットを例に上の項目から順に紹介していきます。
https://scrapbox.io/files/65c6ff9ff3afbf00247bb727.jpg
①名前
https://scrapbox.io/files/65c6ffbc26c86500244a8344.jpg
まず名前ですがこれがコリジョンプリセットの名前になります。例えば「BlockAll」というコリジョンプリセットは名前が「BlockAll」とそのまま表示されます。
②コリジョンEnabled
https://scrapbox.io/files/65c6ffd6b3165b0024d1d655.gif
コリジョンEnabledはコリジョンを有効にするか無効にするかの設定です。以下の4つから選択できます。
コリジョンEnabledはコリジョンを有効にするか無効にするかの設定です。以下の4つから選択できます。
table:コリジョンEnabled
NoCollision コリジョンが無効の状態になり、衝突判定も一切行わなくなります。
つまりアクタ同士の衝突は発生しません。パフォーマンスが最も良いです。
QueryOnly (NoPhysicsCollsion) オーバーラップ(重なりを検知する)のみを有効にしたい場合に選択します。
物理シミュレーションをオンにしているアクタには使用できません。
PhysicsOnly (NoQueryCollision) 物理シミュレーションがオンでアクタを衝突させたい場合に選択にします。
他のアクタとのオーバーラップは行わなくなります。
Collision Enabled コリジョンが有効の状態になり、衝突判定を行う事ができます。
つまりアクタ同士の衝突や、重なりを検知できる状態になります。
🐱まずここの項目ですが、基本的にNoCollision(コリジョン無効)または CollisionEnabled(コリジョン有効)で構いません。そして一旦ここでオーバーラップについて解説します。
オーバーラップとは?
オーバーラップ(重なりの検知)に関しては簡単に言うと衝突しないが重なりを検知したいアクタに対して設定します。例えばダメージを与える火などのアクタにオーバーラップのコリジョンを設定します。以下オーバーラップのコリジョン例です↓火のアクタのコリジョンにオーバーラップを設定し、衝突せずに重なりを検知しています。検知する事でプレイヤーに対してダメージを与える処理などがブループリントで作れます。
https://youtu.be/Ccg2Fmeytkc
オーバーラップについては「衝突しないが重なりを検知する」設定と覚えておきましょう。
③オブジェクトタイプ
https://scrapbox.io/files/65c700a5a68d9a0025c662bf.gif
このオブジェクトタイプではコリジョンのタイプが何なのかを割り当てます。たとえば移動しないアクタにはWorldStaticにして、動くアクタにはWorldDynamicを選択したりします。どのコリジョンにどのタイプを割り当てるかは明確な基準はありません。自分でもオブジェクトタイプは作成できるため自分にとってわかりやすいタイプをオブジェクトに割り当てる事をおすすめします。なお基本的に既存のコリジョンプリセットのオブジェクトタイプを変更する必要はありません。そのままのオブジェクトタイプで良いです。既存で用意されているオブジェクトタイプは下記です。
table:オブジェクトタイプ
WorldStatic 移動しないようなアクタに設定します。
WorldDynamic アニメーションやプログラミングなどで移動するアクタに選択します。例えばブループリントで動かすエレベーターやドアにあたります。
Pawn ブループリントクラスで作成したポーンやキャラクターなどにあたるオブジェクトに設定します。
PhysicsBody 物理シミュレーションによって移動するアクタに設定します。
Vehicle 車に設定します。
Destructible 被破壊メッシュ(破壊されて崩れるようなオブジェクトの事)に設定します。
またこのオブジェクトタイプはプロジェクト設定 > エンジン > CollisionのObjectChannelsから新規作成する事ができます。
https://scrapbox.io/files/65c70126b6cc250025f212e8.jpg
④コリジョンリスポンス(オブジェクトタイプに対してどう衝突するか)
https://scrapbox.io/files/65c7017c8c9caf0024320574.jpg
コリジョンリスポンスではそれぞれのオブジェクトタイプに対して、どのように衝突判定を行うのか設定できます。
一番上の設定項目を見ていきましょう。日本語エディタだと少し表示がバグっていますが左から無視する(衝突しない)、オーバーラップ(衝突しないが重なりを検知する)、ブロック(衝突する)となっています↓
https://scrapbox.io/files/65c7019220eb7e002576a0ba.jpg
例えばWorldStaticの項目にてブロックにチェックを入れると、WorldStaticのタイプのコリジョンを設定したアクタと、このコリジョンプリセットをセットしたアクタは衝突するようになります。
https://scrapbox.io/files/65c701bd5fcbba0024da7a5f.jpg
トレース型とオブジェクト型とは?
トレース型はトレース(レイキャスト)がどのようにコリジョンと衝突判定するのか決定します。トレースとはゲーム内で実際には見えないレーザーを飛ばしてそのレーザーと衝突した時に何らかの処理を行いたい時に使用するものです。まだこの本では紹介していないため一旦無視しておきましょう。オブジェクト型は先ほど紹介したオブジェクトタイプの事です。特に気にする必要はこの時点ではありません。
🐱このようにコリジョンレスポンスではオブジェクトタイプ毎に衝突するのかしないのかの設定を行う事ができます。次ページで実際の衝突を確認していきます。コリジョンプリセットの設定項目は一通り確認できたので一旦ここまでの内容を整理しましょう。
コリジョンプリセットとは?ここまでの内容まとめ
コリジョンプリセットは以下の項目があります。
https://scrapbox.io/files/65c7024b4b7e6c0025528b55.jpg
①コリジョンの有効無効の設定,
⓶オブジェクトタイプ
⓷それぞれのオブジェクトタイプにどのような衝突を行うのか(無視する,オーバーラップ,ブロック)
を設定する項目があります。
次回実際にコリジョンプリセットを実際に設定しつつ、アクタ同士の衝突がどのような結果になるのか理由ととも解説していきます。