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

コリジョンのセットアップ方法

Choose your operating system:

Windows

macOS

Linux

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

セットアップ

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

With Starter Content 設定が有効になっていることを確認してください。有効にしないと、この操作ガイドで後で使用する一部のアセットが存在せず、わかりにくくなってしまいます。

NewProjectWithStarterContent.png

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

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

ContentBrowserWithStarterContent.png DoorInContentBrowser.png

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

DefaultDoor.png

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

PhysicsDetailsPanel.png

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

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

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

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

ChairSphere.png

ChairCapsule.png

ChairBox.png

球体コリジョン単純化

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

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

いずれのプリミティブ形状もここで必要なものではなさそうです。しかし、 [Collision] ドロップダウン メニューの他のオプションを使用して、必要としているものに近づけることはできます。こうしたオプションは、 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 (コリジョンを削除)] を再度選択して、 [Collision] ドロップダウン メニューから [Auto Convex Collision (自動凸型コリジョン)] を選択します。すると、以下の画面のような [Convex Decomposition (凸型分解)] パネルが表示されます。

ConvexDecomposition.png

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

AutoConvexCollision1.png

AutoConvexCollision2.png

デフォルト設定

Max Accuracy と Max Hull Verts

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

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

CompositeBoxCollision.png

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

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

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

PhysicsDetailsPanel.png

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

椅子の [Details] パネルに戻り、 [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

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル