Language:
Page Info
Skill Level:
Engine Version:

スタティックメッシュでコリジョンをセットアップする

UE4 ではスタティックメッシュに様々なことを行わせることができます。例えば、ゲームプレイ中にテクスチャやマテリアルを変更したり、マチネを使用してレベル全体で移動させます。レベルでスタティックメッシュに何を行わせる場合でも、プレイヤーがメッシュを突き抜けて歩いたり、メッシュを通り抜けて射撃したりしてほしくないでしょう。このような場合に、スタティックメッシュでコリジョンをセットアップすると役立ちます。

セットアップ

既に作業対象の独自のレベルとスタティックメッシュをお持ちである場合は、この手順をスキップできます。そうでなければ、UE4 を起動し、新規プロジェクトを作成します。プロジェクトに名前を付けて、保存場所を選択します。この例では Blueprint First Person Template を使用します。 このテンプレートで作業する必要はありませんが、このテンプレートで実装済の発射物を発射する機能を使用して後でポイントをデモします。そのため、このテンプレートを使用することが理解に役立ちます。

スターター コンテンツ が有効になっていることを確認してください。有効にしないと、この操作ガイドで後で使用する一部のアセットが存在せず、理解が難しくなるかもしれません。

NewProjectWithStarterContent.png

単純形状のメッシュのコリジョン

プロジェクトが開き、スターター コンテンツ を有効にすると コンテンツ ブラウザ「Starter Content」 という名前のフォルダがあるはずです。このフォルダ内に、 「Props」 という名前の別のフォルダがあります。このフォルダまでブラウズし、 SM_Door という名前のスタティックメッシュを探します。

ContentBrowserWithStarterContent.png DoorInContentBrowser.png

SM_Door を見つけたら、以下のいずれかの方法でスタティックメッシュ エディタ内で開きます。アセット上で ダブルクリック するか、アセット上で 右クリック して表示されるコンテキスト メニューから [Edit] を選択して開きます。エディタが開いたら、以下のような画面が見えるはずです。

DefaultDoor.png

デフォルトでは、このメッシュには何もコリジョンが設定されていません。コリジョンがないと、プレイヤーはメッシュを歩いて通り抜けることが可能になり、メッシュの物理をシミュレーションすると、プレイ開始直後にメッシュはワールドで落下します。コリジョンを設定しプレイする前に、メッシュをレベルに配置することでこれをテストできます。プレイヤーがソリッド メッシュを歩いて通り抜けることができることに注意してください。また、射撃したときにドアが吹き飛ぶようにしたい場合、または空から開始して地面に落下する場合、[Details (詳細)] パネルで [Simulate Physics (物理をシミュレート)]true に設定する必要があります。これはスタティックメッシュがコリジョンを持っていなければデフォルトでは行うことはできません。

PhysicsDetailsPanel.png

ほとんどの場合、こうしたエフェクトは望ましくありません。そのため、これからこのメッシュにコリジョンを設定します。エディタ上部に、コリジョン のドロップダウン メニューがあります。この上でクリックすると、メッシュにコリジョンを追加するために必要なオプションが表示されます。

CollisionMenu.png

この場合、メッシュはどちらかというと単純な形状になります。単純な形状であるため、メッシュのコリジョンのセットアップが簡単になります。[Collision (コリジョン)] メニューの上から 3 つまでのオプションは、メッシュを単純な形状で囲みます。これは、メッシュでブロックまたはオーバーラップできるか否かの境界として使用されます。以下は、こうした単純な形状のコリジョン メッシュを持つメッシュの例です。

Sphere1.png

Capsule1.png

Box1.png

Sphere2.png

Capsule2.png

Box2.png

球体コリジョン単純化

カプセル コリジョン単純化

ボックス コリジョン単純化

コリジョン設定後にメッシュ周囲にアウトラインが表示されない場合は、ツールバーのコリジョン ボタン (CollisionButton.png) が強調表示されていることを確認してください。また、メッシュ上で既にコリジョンを単純化し、別の単純化したコリジョンをメッシュに追加した場合、新しいコリジョンは他のコリジョンに置き換えられるのではなく、追加されます。最初にコリジョンを取り除かないで、上記からすべての 3 つの単純化したコリジョンを追加した場合、以下のようになります。

AllCollision.png

この問題に対処するには、コリジョンのうちの 1 つを選択して delete キーを押すか、[Collision (コリジョン)] ドロップダウン メニューから [Delete Selected Collision (選択したコリジョンを削除)] を選択してひとつづつ削除するか、または [Collision] メニューで [Remove Collision (コリジョンを取り除く)] を選択してメッシュ上ですべてのコリジョンを取り除きます。すべてのコリジョンメッシュを取り除いてよいかを確認するポップアップが表示されます。[Yes] をクリックするとスタティックメッシュからコリジョンが取り除かれます。

RemoveCollision.png RemoveCollisionPopUp.png

メッシュにコリジョンを適用すると、コリジョンに平行移動ウィジェットが表示されているのがわかります。コリジョンを設定後、UE4 で他のオブジェクトで行うのと同じようにメッシュを平行移動、回転、スケーリングすることができます。

複雑なメッシュのコリジョン

カプセルやボックスに簡単にフィットするメッシュを持っていたり、正確なコリジョンを起こすことが重要ではないメッシュを持っている場合は、最後のセクションでセットアップする単純なコリジョンを使用すればうまく機能します。しかし、複雑な形状のメッシュでしかも正確なコリジョンが必要な場合もあることでしょう。このセクションでは、こうした複雑なメッシュのコリジョンのセットアップ方法を説明します。

スターター コンテンツ 内の 「Props」 フォルダに戻り、スタティックメッシュの SM_Chair にブラウズします。このサムネイル上で ダブルクリック すると、スタティックメッシュ エディタで開きます。ご覧になっておわかりのように、このメッシュにはすでにコリジョンがあり、以下の画面のようになっているはずです。

ChairDefaultCollision.png

この例では、プレイヤーに椅子のクッション上に座ってほしいとします。デフォルト設定のコリジョン メッシュの状態では、プレイヤーが椅子に座るのを妨げる目に見えないバリアがあります。(プレイヤーがゲームでプレイする場合、スタティックメッシュそのものだけが見えてコリジョン メッシュは見えません。そのため、プレイヤーは椅子に座ろうとしますが、何が邪魔しているかはわかりません。)

エディタ上部の コリジョン ドロップダウン メニューから [Remove Collision] を選択してメッシュのコリジョンを取り除きます。この操作ガイドの前のセクションで使用したプリミティブ形状を使用できますが、以下の画像のように、こうしたプリミティブではひとつも必要としている状態にはなっていないことがわかります。

ChairSphere.png

ChairCapsule.png

ChairBox.png

球体コリジョン単純化

カプセル コリジョン単純化

ボックス コリジョン単純化

いずれのプリミティブ形状も必要としているものになっていないようです。しかし、 [コリジョン] ドロップダウン メニューの他のオプションを使用して必要としているものに近づけることはできます。こうしたオプションは、K- DOP のシンプルなコリジョン ジェネレータと呼ばれます。 K-DOP はバウンディング ボリュームの一種で、 K discrete oriented polytope の略語です (K は軸方向に並べられた平面の数です)。基本的には、軸方向に整列する K 個の平面をできる限りメッシュに近づけます。結果として出来上がった形状は、コリジョン ハルとして使用されます。スタティックメッシュ エディタ で K は次の値を取ることができます。

  • 10 - 4 つのエッジで面取りされたボックス。X、Y、Z に整列したエッジを選ぶことができます。

  • 18 - すべてのエッジが面取りされたボックス。

  • 26 - すべてのエッジと角で面取りされたボックス。

以下は、10-DOP、18-DOP、および 26-DOP のそれぞれで椅子のメッシュがどのように見えるかを表しています。

10DOP.png

18DOP.png

26DOP.png

10DOP

18DOP

26DOP

こうしたコリジョン メッシュは求めているものに近づいてきていますが、クッション間にまだギャップがあり、プレイヤーが椅子に座るのを妨げるでしょう。[Remove Collision] をもう 1 回選択したら、[コリジョン] ドロップダウン メニューから [Auto Convex Collision (自動凸型コリジョン)] を選択します。一度これを行ったら以下の画面のような [Convex Decomposition (凸型分解)] パネルが表示されます。

ConvexDecomposition.png

このウィンドウにある一番上のオプションは、[Accuracy] です。これは、できる限り少ないプリミティブを生成し、コリジョン メッシュを表します。一番下のオプションの [Max Hull Verts] は、コリジョン メッシュが持つ頂点数を増加、減少させます。こうした値が大きくなるほど、コリジョンの精度が高まりますが、同時にコリジョン メッシュの複雑度も増します。[Apply] をクリックすると、こうした設定がメッシュに適用されます。

AutoConvexCollision1.png

AutoConvexCollision2.png

デフォルト設定

Max Accuracy と Max Hull Verts

複雑なコリジョンをセットアップするもうひとつの簡単な方法は、複数のシンプルな形状のコリジョン メッシュを使用してメッシュのコリジョンを作成するというものです。この操作ガイドの前の方のセクションで、別の単純なコリジョン メッシュを作成することはオリジナルを置き換えるのではなく、それに追加するものだということを学びました。各コリジョン メッシュは、個別に平行移動、回転、スケーリングなどできるように独自のトランスフォーム ウィジェットを持つことも説明しました。これを使用してスタティックメッシュのコリジョンを作成することができます。

コリジョン ドロップダウン メニューの [Add Box Simplified Collision ] を選択して開始します。コリジョン メッシュを 左クリック してトランスフォーム ウィジェットを呼び出します。コリジョン メッシュを平行移動、回転、スケーリングし、椅子のアームから地面に沿ってフィットするようにします。コリジョン メッシュを選択したままの状態で コリジョン ドロップダウン メニューから [Duplicate Selected Collision (選択したコリジョンを複製)] を選択するか、または Ctrl + W を押してコリジョン メッシュを複製します。このコリジョン メッシュを移動して、椅子のもうひとつのアームに沿ってフィットするようにします。もう一回メッシュを複製します。この新しいメッシュを選択した状態で、メッシュを移動、スケーリング、回転させて、椅子の底部に沿ってフィットするようにします。コリジョン メッシュを複製し、上に動かして椅子の座面にそってフィットするようにします。メッシュを 1、2 回複製し、回転させて椅子背面に沿ってフィットするようにします。操作を終了すると、以下のようになります。

CompositeBoxCollision.png

さらに椅子の形状を調整することもできますが、この例の目的としては、コリジョンを設定したこうした 5 つのボックスを使ってプレイヤーがクッションに座れるようにします。

物理とコリジョンのプリセットをシミュレーションする

スタティックメッシュにコリジョンを設定したので物理をシミュレーションできます。スタティックメッシュ エディタ内のツールバーのちょうど左側にある Save ボタンをクリックして椅子のメッシュを保存します。次に コンテンツ ブラウザSM_Chair を探します。メッシュのコピーをレベルにドラッグし、それを選択した状態で [詳細] パネルを見ます。[詳細] パネルの 物理 セクションで、最初のオプションは [Simulate Physics (物理をシミュレート)] であり、デフォルトでは false になっています。Simulate Physics を false に設定した状態でレベルをプレイすると、キャラクターはメッシュを通り抜けることはできず、発射物はメッシュに全く影響を及ぼしません。

PhysicsDetailsPanel.png

レベルのプレイを停止し、 [Simulate Physics]true に設定します。これでプレイすると、キャラクターが椅子に向かって歩いていくと、メッシュは動きます。メッシュに向かって射撃すると、レベルでメッシュは空中に撃たれます。これはメッシュが物理をシミュレーションしているだけでなく、デフォルトの Collision Preset (コリジョン プリセット) ですべてのものをブロックするように設定されているためです。

椅子の [詳細] パネルに戻り、[Collision] セクションで [Collision Presets (コリジョンのプリセット)] というラベルが付いているドロップダウン メニューがあります。メッシュのインスタンスがワールドの他のオブジェクトに反応するやり方は、その Collision Presets が何であるかによって変わります。以下のオプションを見てみましょう。

CollisionPresets.png

デフォルトでは [Block All (すべてをブロック)] に設定されています。これを [Overlap All (すべてをオーバーラップ)] に切り替えると、プレイ開始直後にレベルでメッシュが落下することがわかります。カスタム プリセットもあります。これを使用すると、レベル内でメッシュが様々なオブジェクトにどのように反応するかを手動で設定できます。ポーンをブロックするが、発射物はオーバーラップし、他のすべてのものは無視したい場合があるかもしれません。カスタム プリセットでは、こうしたことをメッシュに指示することができます。これでメッシュにコリジョンをセットアップしたので、それをレベルに配置し、コリジョンを使用してレベル内の他のオブジェクトにどのように影響を及ぼすか、またはどのように影響を受けるかをセットアップできます。

レベル エディタで Static Mesh アクタ やブループリント エディタ内にあるような Static Mesh コンポーネント を選択する場合、[Details Panel][Collision Category][Collision Presets (コリジョンのプリセット)] の順に進むと Default が表示されます。これは、初期設定からコリジョン プリセットが変更されていないことを表します。ここで他の何か、例えば BlockAll がリストにあれば、選択した Static Mesh アクタ / コンポーネントのコリジョンのプリセットがオーバーライドされたことを示します。

defaultCollision.png