Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 コリジョンについて 基礎編

ゲームを作っている上で避けては通れない当たり判定、またの名をコリジョンについてです。UE4では非常に簡単にコリジョンが扱えるように仕組みが用意されています。

コリジョンが扱えるアクター

コリジョンと言ってもなんでもかんでも扱えるわけではありません。

特に最初に勘違いしやすいのはジオメトリーブラシ系のアクターです。ジオメトリーブラシは簡易モデリング機能も備えていたりして、とても簡単にレベル上に配置が出来ますが、それ自体にはどうやらコリジョンの設定がありません。が、しっかりとコリジョン判定は行なわれていたりします。

これはジオメトリーブラシがあくまでも初期のレベルデザイン用と割りきっているために最初から設定できないようにしていると思われます。ジオメトリーブラシは自動的にコリジョンがついているようなので、深く気しなくてもいいと思います。※もしコリジョンの設定ができるよ、ということであれば教えてください

 ではどういうアクターであればコリジョンの設定ができるのでしょうか?

一番よく使うのはやはりスタティックメッシュだと思います。適当にスタティックメッシュのファイルを開いてみてください。

f:id:alwei:20140710204126j:plain

赤いところにあるコリジョンボタンを押すとコリジョンが表示されます。何も変わらない場合はそのスタティックメッシュにコリジョンが設定されていないということです。

試しにコリジョンをつけてみましょう。

メニューの"コリジョン"→"自動凸包コリジョン"という順番で選択してください。

f:id:alwei:20140710204606j:plain

右下の方に"凸型分解"という詳細が出現しています。ここではコリジョンの形をある程度決めることができます。単純な形状であればそのままの設定でも問題ないはずです。少し複雑な形状な場合は凸包数と凸包頂点数を増やしてみてください。設定ができれば適用ボタンを押してください。

成功すればコリジョンのラインが見えているはずです。このラインに沿った形でコリジョンが生成されていますので、覚えておきましょう。あとはこのアクターをレベル上に配置するだけでコリジョンが発生します。

コリジョンプリセット

コリジョンにはコリジョンプリセットというものがあって、この設定を使いこなせばほぼあらゆるものに対する当たり判定に対応することができます。コリジョンプリセットを確認しましょう。

メインウィンドウのメニューから"プロジェクト設定"→"Engine"の一覧の中にある"コリジョン"を選択します。その下ほ方に"Preset"という項目があって三角のボタンで閉じられていた場合、ボタンを押して開いてみてください。

f:id:alwei:20140710205521j:plain

こんな感じに開いていると思いますので、適当なコリジョンプリセットを見てみましょう。

f:id:alwei:20140710205749j:plain

コリジョンで特に重要なのが"CollisionEnabled"と"ObjectType"です。

"CollisionEnabled"はそのコリジョンが有効かどうかを設定します。3つの選択肢は以下の通り。

名前の通りなのであまり意識することはないのですが、基本的にコリジョンをつけたい時は"Collision Enabled"にしておけばいいです。一時的にコリジョンなしにしたい場合等は"No Collison"を設定してください。

もうひとつは"ObjectType"です。こっちは種類が多いので少し絞って解説します。

  • WorldStatic → ワールド上で静的で全く動かないアクター。主に背景
  • WorldDynamic → ワールド上で動的に動くアクター。背景の小物に多い
  • Pawn → キャラクターなど複雑な動きなアクター。

この他にも沢山ありますが、一旦これくらい覚えておけば大丈夫でしょう。スタティックメッシュを作るとこれらのコリジョンが設定できるようになります。実際にスタティックメッシュをレベル上に配置してみてください。

そして配置したスタティックメッシュを選択して、ウィンドウ右下にある詳細パネルのCollsionの設定を探してみてください。この中にコリジョンプリセットがあります。(UE4.2バージョンでは日本語が誤訳になっているので注意)

f:id:alwei:20140710223545j:plain

さっきと似たようなものがでてきました。ここで大事なのは、オブジェクト応答のどこにチェックが入っているかです。3つある項目についてを説明します。

  • 無視する → 言われたままこのアクターが対象オブジェクトとヒットした際、実際には何もせず無視する
  • オーバーラップ → このアクターが対象オブジェクトとヒットした際、当たり判定のみを行ないオーバーラップイベントを起こす
  • ブロック → このアクターが対象オブジェクトとヒットした際、ぶつかったと判定して互いに反動を起こす

自分自身のオブジェクトタイプは既に上で設定しているはずです。あとは自分が何と当たり判定をとるのか?ということです。

なんとなくわかってきたでしょうか?

オーバーラップするを選択していた場合は、基本的に何も起こりませんが衝突した際の情報をとることができます。ヒットした瞬間がわかるので、その際にダメージ判定を行なうということに使えます。

ブロックするを選択していた場合は互いにぶつかって、WorldStaticなオブジェクトならそこで止められてしまいますが、WorldDynamicなオブジェクトの場合は互いの重量から反動しあって、互いに動きが発生します。

カスタム化して更に柔軟に

コリジョンプリセットを変えることでヒットする対象を切り替えできますが、更にプリセットとは別に"Custom"というものがありますが。これを設定すればレベル上に配置しているひとつひとつのアクターに対してコリジョン設定が指定できます。同じものでも当たるものを変えたりもできます。

多少手間はかかるかもしれませんが、この設定はぜひ覚えておきましょう。柔軟なゲームデザインレベルデザインに対応することができるでしょう。

f:id:alwei:20140710230250j:plain