50.コリジョンとは?衝突判定について知っていこう
コリジョンとは?
UnrealEngineのコリジョンは意味が二つあります。
①コリジョン = アクタ同士の衝突判定のこと。
②コリジョン = アクタの衝突判定となるブロックのこと。
二つ意味がありますが、一般的にはコリジョンとは①の「アクタ同士の衝突判定のこと」を指します。
🐱ひとまずここでは「コリジョン = アクタ同士の衝突判定」と認識しておきましょう。では実際にコリジョンに触れてみて理解していく事から始めていきます。
コリジョンを可視化して確認してみよう
簡単にコリジョンを設定してプレイしていきます。
まずサードパーソンのテンプレートプロジェクトを使用します。
https://scrapbox.io/files/65c694ff8c38f400261b38dd.jpg
StaterContents > Props > SM_Chairをレベルに配置します。
https://scrapbox.io/files/65c6951522b038002459f1b8.jpg
表示からコリジョンを選択します。
https://scrapbox.io/files/65c6952bfe18570025efada5.jpg
椅子のコリジョン(衝突判定の線)が可視化されます
そしたらコリジョンを見やすくするために一旦「ライティングあり」から「ライティングのみ」に切り替えます。このライティングのみというのは3Dモデルの見た目となるテクスチャ(画像)を無効にして表示する設定です。
https://scrapbox.io/files/65c6955e948c120025c320ca.jpg
可視化したコリジョンを確認してみよう
https://scrapbox.io/files/65c6957a4532f80025daede0.jpg
椅子を囲う境界線がはっきり見えるようになりました。これは衝突判定を行う際の境界線で、この椅子のメッシュを囲うブロックをコリジョンと言います。
🐱この境界線が椅子の衝突判定となっています。後でプレイして確認します。
では今度はプレイヤーのコリジョンも確認したいと思います。BP_ThirdpersonCharacterをレベルに配置してみます。
https://scrapbox.io/files/65c695a0669a980025045044.jpg
可視化したコリジョンを確認してみよう
https://scrapbox.io/files/65c695ba56c7e90025ee69a8.jpg
プレイヤーを囲う線がありますが、これがコリジョンになります。なおプレイヤーに関しては外側(グレーの線)と内側(緑色の線)で二つのコリジョンが付いています。二つコリジョンが付いている理由は後々解説していきます。プレイヤーもコリジョン(衝突判定のブロック)が付いているため、他のアクタと衝突するという事になっています。
プレイヤーのコリジョンを確認し終えたので削除しておきます。
https://scrapbox.io/files/65c695f8a116370026cf1275.gif
表示をライティングありに戻しておきます。
https://scrapbox.io/files/65c696138c38f400261b3b9f.jpg
椅子を選択した状態で物理 > SimulatePhysicsにチェックを入れます。
https://scrapbox.io/files/65c6962fcae1190025510754.jpg
SimulatePhysicsとは?
SimulatePhysicsは物理シミュレーションといって、チェックを入れる事で重力や外部からの力によってアクタが動くようになる設定です。
少し椅子を上にあげておきます。
https://scrapbox.io/files/65c696676e97430025489b43.jpg
プレイしてみましょう。地面やプレイヤーと椅子が衝突しているのが確認できます。
https://scrapbox.io/files/65c6968461f5d500250ce783.gif
このようにコリジョンという衝突判定のブロックがアクタに設定されてると、アクタ同士は衝突を行います。
🐱椅子には既に衝突を行うコリジョンが設定されているため、プレイヤーや地面と衝突を行うという仕組みになっています。逆に言うと"衝突を行うコリジョン"が設定されていないとアクタ同士は衝突を行いません。
次に椅子を選択した状態でコリジョン > コリジョンプリセットをOverlapAll(すり抜ける設定)を選択します。
https://scrapbox.io/files/65c696c8e88cef0028fb5c85.jpg
コリジョンプリセットとは?
コリジョンプリセットとはアクタ同士を衝突させる設定にするか、衝突しない設定するかなどコリジョンの挙動を設定する事ができます。例えばBlockAllを選択すると、全てのアクタに対して衝突します。OverlapAllを選択すると他のアクタに対しては衝突せずに貫通するようになります。コリジョンプリセットについて詳しくは次回のページで解説します。
プレイしてみるとコリジョンはすり抜ける設定になっているので椅子が地面を貫通して落下していきました。
https://scrapbox.io/files/65c6970e0c387f0025a76d78.gif
なおプレイを終了すると以下のエラーが表示されますが一旦これは無視しておきましょう。(アクタは貫通するので物理挙動を行う設定は必要ないよという意味のエラー文です)
https://scrapbox.io/files/65c6974183e81c002464f1bb.jpg
このようにコリジョンは衝突させたり、すり抜けるように設定する事ができます。
https://scrapbox.io/files/65c6976631519b0025c71c02.jpg
コリジョンをイラストでわかりやすく解説!
ではコリジョンのイメージをイラストでわかりやすく解説していきます。
メッシュとコリジョンを合わせる事で衝突判定のあるアクタとなります。
https://scrapbox.io/files/65c6979743254c0025212155.png
メッシュには基本的に衝突を行うコリジョンが既に設定してあります。例えば今回の椅子のようにデフォルトの状態で他のアクタと衝突します。また自身でメッシュにコリジョンを付ける事もできます。後ページ「メッシュにコリジョンを追加してみよう」で紹介します。
自作の3Dモデルや外部サイトからインポートしたアセットなどには、コリジョンを自分で設定する必要があります。
コリジョンが付いたアクタ同士は衝突するようになります。例えばキャラとモンスターがぶつかったりします。
https://scrapbox.io/files/65c697bcf8821c0026d33a66.png
なお衝突せずにすり抜けるコリジョンを設定する事もできます。
https://scrapbox.io/files/65c697e7ad28ae002453fad5.png
このすり抜けるコリジョンに関しては、例えば「火」など衝突は行わないが触れた時にダメージ判定を行いたい時などに使用します。これは後のページ「ダメージが出る火を作る」などで解説します。
コリジョンはアクタのタイプによってすり抜けるかどうか個別に設定できます。
https://scrapbox.io/files/65c69847a68d9a0025c42d5d.png
例えばキャラクター同士は衝突しないように設定して、椅子には衝突するといった事も可能です。
🐱このようにコリジョンを正しく設定する事で、アクタの衝突判定をとる事ができます。ではコリジョンについてまとめていきます。
コリジョンとは?まとめ
基本的にコリジョンとは「アクタ同士の衝突判定」を意味します。もうひとつの意味としてアクタの衝突判定のブロックの事もコリジョンと言います。
①コリジョン = アクタの衝突判定となるブロック
コリジョンは以下のようにアクタの衝突判定を行うブロックの事です。コライダーと呼ぶ事が稀にありますが(Unityなど)、UnrealEngineではコリジョンが一般的な名称です。
https://scrapbox.io/files/65c69897a771d5002595f7de.jpg
基本的なアクタには衝突を行うコリジョンがデフォルトで設定されています。
https://scrapbox.io/files/65c698a8a68d9a0025c42e79.jpg
上の画像で言うと、椅子とプレイヤーにはコリジョンがついているのでお互いに衝突し合うといった感じになっています。ただしコリジョンは衝突せずにすり抜ける設定にする事もできます。
②コリジョン = アクタ同士の衝突判定のこと
ではもう一つの意味ですが単に衝突自体の事を指しています。このように↓アクタ同士が衝突する事、衝突判定(当たり判定)を取る事をコリジョンと言います。
https://scrapbox.io/files/65c6968461f5d500250ce783.gif
https://scrapbox.io/files/65c698e552956d0024bcb849.jpg
🐱コリジョンには二つ意味があり少しややこしいですが、「アクタ同士の衝突判定のこと」「衝突判定となるブロック」として覚えておきましょう。