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

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

Unreal Engine では、ゲームプレイ中に テクスチャマテリアル を変更したり、シーケンサー を使用して レベル 全体を移動したりするなど、スタティック メッシュ に多くのことを実行させることができます。レベル内にスタティック メッシュがあるとき、それがどんなものであれ、その中でプレイヤーがメッシュを介して歩いたり撃ったりできないようにしたい場合があると思います。そのような状況では、スタティック メッシュにコリジョンを設定すると便利です。

設定

開始するには、「First Person Game (ファース トパーソン ゲーム)」テンプレートを使用して新しいプロジェクトを作成し、[Starter Content (スターターコンテンツ)] を有効にします。Unreal Engine での新規プロジェクトの作成については、「新規プロジェクトを作成する」を参照してください。

すでに作業対象のレベルとスタティックメッシュをお持ちの場合は、この手順は省略できます。ただし、このテンプレートを使用すると物体を発射して後で説明するポイントを示せるので、このドキュメントの手順をわかりやすく実行できます。

画像をクリックするとフルサイズで表示されます。

プロジェクトを開いて、コンテンツ ブラウザ で検索バーを使用するか、または [Content (コンテンツ)] > [Starter Content (スターター コンテンツ)] > [Props (プロップ)] の順に移動して「 SM_Door」という名前の スタティックメッシュ を開きます。

画像をクリックするとフルサイズで表示されます。

画像をクリックするとフルサイズで表示されます。

SM_DoorSM は Static Mesh (スタティックメッシュ) の略で、Unreal Engine が推奨する標準の命名規則に従っています。一貫した命名規則を使用すると、プロジェクトを整理した状態に維持しやすくなります。Unreal Engine のファイル命名規則の詳細については、「アセットの命名規則に関する推奨事項」を参照してください。

SM_Door を見つけたら、次のいずれかの方法で スタティック メッシュ エディタ を開きます。

  • アセットを ダブルクリック する

  • アセットを 右クリック し、コンテキスト メニューから [Edit (編集)] を選択する

エディタを開くと、以下に示すようなものが表示されます。

画像をクリックするとフルサイズで表示されます。

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

デフォルトでは、このドアにコリジョンは設定されていません。コリジョンがなければ、プレイヤーはドアを通り抜けることができます。

コリジョンを設定する前に、ドアを自分のレベルに配置してテストしてからレベルをプレイすることができます。

No Collision on Static Mesh

また、ドアを撃ったときに吹き飛ばしたり、空中に配置したときに地面に落下させたりする場合は、[Details (詳細)] パネルで [Simulate Physics (物理シミュレーション)] を「true」に設定する必要があります。ただし、スタティック メッシュにコリジョンがない場合、このオプションはデフォルトでは使用できません。

画像をクリックするとフルサイズで表示されます。

これらのエフェクトはほとんどの場合望ましい結果を出力しないため、次に進みこのスタティックメッシュのコリジョンを設定する必要があります。

スタティックメッシュ エディタの上部にあるメニューバーには、[Collision (コリジョン)] ドロップダウン メニューがあります。クリックすると、メッシュにコリジョンを追加するためのオプションが表示されます。これらのオプションには、ツールバーの [Collision] ドロップダウン メニューをクリックしてアクセスすることもできます ( Collision Button )。スタティック メッシュ エディタのレイアウトの詳細については、「スタティック メッシュ エディタ UI」を参照してください。

画像をクリックするとフルサイズで表示されます。

ドア メッシュの形状はかなりシンプルです。そのため、スタティックメッシュのコリジョンを設定する作業もかなり簡単です。

[Collision (コリジョン)] メニューの上から 3 つのオプションを使用すると、メッシュをブロックまたはオーバーラップできるものとできないものの境界として使用されるシンプルなコリジョン形状でスタティックメッシュを囲みます。以下は、これらのコリジョ ンメッシュを使用したドアメッシュの例です。

Sphere 1

Capsule 1

Box 1

Sphere 2

Capsule 2

Box 2

球体簡素化コリジョン

カプセル簡素化コリジョン

ボックス簡素化コリジョン

メッシュにすでに単純化コリジョンがある状態で別のコリジョンを追加した場合、新しいコリジョンは他のコリジョンを置き換えるのではなく、それに追加されます。

上から 3 つすべての単純化コリジョンを追加すると、次の画像のようになります。

画像をクリックするとフルサイズで表示されます。

これを解決するには、次のいずれかを実行します。

  • コリジョンの 1 つを選択し、Delete キーを押す。

  • [Collision] ドロップダウンメニューから [Delete Selected Collision (選択したコリジョンを削除)] を選択して、それらを 1 つずつ削除する。

  • [Collision] メニューで、[Remove Collision (コリジョンを削除)] を選択して、スタティックメッシュ上のすべてのコリジョンを削除する。

画像をクリックするとフルサイズで表示されます。

コリジョンを適用した後、コリジョン メッシュをクリックして、平行移動ウィジェットに注目すると、エンジン内の他のオブジェクトと同じように、コリジョン メッシュを移動、回転、スケーリングが可能になっていることがわかります。

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

前のセクションで設定した単純なコリジョン メッシュを使用している場合、次でも正常に機能します。

  • カプセルやボックスに簡単に収まるスタティックメッシュ。

  • コリジョンが正確かどうかが問題にならないスタティックメッシュ。

ただし、正確なコリジョンが必要な、より複雑な形状のスタティックメッシュを使用している場合もあります。このセクションでは、そのようなコリジョンの設定方法について説明します。

スターター コンテンツ 内の「Props」フォルダに戻り、スタティックメッシュの SM_Chair を参照します。サムネイルの ダブルクリック** して、スタティック メッシュ エディタで開きます。

ご覧のとおり、このメッシュにはすでにコリジョンがあり、以下に示すようになります。

画像をクリックするとフルサイズで表示されます。

プレイヤーが椅子のクッションに座れるようにしたいと想定します。椅子のデフォルトのコリジョン メッシュには、目に見えないバリアがあり、プレイヤーは座れません。

プレイヤーがゲームをプレイしているときは、スタティック メッシュ自体のみが表示され、コリジョン メッシュは表示されません。プレイヤーは椅子に座ろうとしても何かが邪魔して座れず、その理由もわかりません。

[Collision] ドロップダウンメニューから [Remove Collision (コリジョンを削除)] を選択して、コリジョン メッシュを削除します。前のセクションで使用したプリミティブ形状を試すこともできますが、下の画像でわかるように、どれも完全に正しく表示されません。

Chair Sphere

Chair Capsule

Chair Box

球体コリジョン単純化

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

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

プリミティブ形状のどれも、必要とされる正確なコリジョンが完全に備わっていないようです。ただし、[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 で次のようになります。

10-DOP

18-DOP

26-DOP

10DOP

18DOP

26DOP

これらのコリジョン オプションは必要な精度に近いのですが、クッション間にはまだギャップがあります。したがって、プレイヤーが椅子に座れない可能性があります。

もう一度 [Remove Collision] を選択します。次に、[Collision] ドロップダウンメニューから [Auto Convex Collision (オートコンベックスコリジョン)] を選択します。

画像をクリックするとフルサイズで表示されます。

下の写真の [Convex Decomposition (凸型分解)] パネルが [Details (詳細)] パネルに表示されます。

画像をクリックするとフルサイズで表示されます。

次の表で、[Convex Decomposition] パネルの各オプションについて説明します。

オプション

説明

Hull Count (ハルカウント)

コリジョン メッシュを表すプリミティブの数を決定します。

Max Hull Verts (マックスハル (頂点))

コリジョン メッシュの頂点の数を増減します。

Hull Precision (ハル精度)

コリジョン メッシュを生成するときに使用するボクセルの数。

これらの値が高いほど、コリジョン メッシュはより正確になりますが、より複雑になります。[Apply (適用)] をクリックすると、これらの設定がスタティック メッシュに適用され、コリジョン ボリュームが表示されます。

Auto Convex Collision

Auto Convex Collision

デフォルト設定

Max Accuracy と Max Hull Verts

正確なコリジョンは、複数の単純化されたコリジョン メッシュを使用する方法で設定することもできます。上記では、別の単純な単純化されたコリジョン メッシュを作成すると、元のメッシュが置き換えられるのではなく追加されると説明しました。また、各コリジョン メッシュには独自のトランスフォーム ウィジェットがあるため、個別に移動、回転、スケーリングできます。これを使用すると、スタティック メッシュのカスタム コリジョン メッシュを作成できます。

[Collision] ドロップダウンメニューから [Add Box Simplified Collision (ボックス単純化コリジョンを追加)] を選択します。コリジョン メッシュを クリック して、そのトランスフォーム ウィジェットを表示します。

次に、コリジョン メッシュを平行移動、回転、拡大縮小して、椅子のアームに沿って地面にフィットするようにします。

Custom Box Collision Mesh

コリジョン メッシュを選択したまま、[Collision] ドロップダウンメニューから [Duplicate Selected Collision (選択したコリジョンを複製)] を選択するか、Ctrl と D を同時に押して、コリジョン メッシュを複製します。

次に、このコリジョン メッシュを動かして、椅子のもう一方のアームに沿ってフィットさせます。

画像をクリックするとフルサイズで表示されます。

コリジョン メッシュを再度複製します。この新しいメッシュを選択した状態で、このメッシュを移動、拡大縮小、回転して、椅子の下部に合わせます。

画像をクリックするとフルサイズで表示されます。

そのコリジョン メッシュを複製し、椅子の座席に沿ってフィットするように上に移動させます。

画像をクリックするとフルサイズで表示されます。

コリジョン メッシュをもう一度複製し、椅子の後ろに沿ってフィットするように回転させます。

完了すると、次のようなものになります。

画像をクリックするとフルサイズで表示されます。

戻って椅子の形状をより厳密に合わせることもできますが、現在のコリジョン メッシュでもプレイヤーはクッションに座れるようになりました。

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

スタティック メッシュにコリジョンを適用して、物理をシミュレートできるようになりました。スタティック メッシュ エディタ内のツールバーの左にある [Save (保存)] ボタンをクリックして、椅子のメッシュを保存します。

次に、コンテンツ ブラウザ 内で「 SM_Chair 」を見つけて、レベルにドラッグします。選択したまま、[Details] パネルを確認します。

[Details] パネルの [Physic (物理)] セクションで、[Simulate Physics (物理シミュレーション)] オプションが使用可能になります。[Simulate Physics] を「 false 」に設定してレベルをプレイすると、椅子の上に移動したり、物体を撃ったりしてもメッシュには影響しません。ただし、メッシュにコリジョンが発生しているため、キャラクターは椅子を通り抜けることができません。

「First Person Shooter」テンプレートを使用して椅子で物体を射出するには、キャラクターを武器のところまで歩かせて武器を収集し、射出物を入れて、クリック して撃ちます。

画像をクリックするとフルサイズで表示されます。

レベルのプレイを停止し、 [Simulate Physics]true に設定します。その後プレイすると、プレイヤーが椅子に足を踏み入れた際に椅子が動くようになります。スタティックメッシュを撃つと、メッシュはレベルを横切って空中に発射されます。

Simulate Physics Active for Static Mesh Collision

これは、スタティックメッシュが物理をシミュレートしているだけでなく、メッシュがデフォルトの [Collision Presets (コリジョン プリセット)][Physics Actor (物理アクタ)] に設定されているためです。

椅子の [Details] パネルに戻ると、[Collision] セクションに [Collision Presets] というラベルの付いたドロップダウンメニューが表示されます。スタティックメッシュのこのインスタンスがワールドの他のオブジェクトにどのように反応するかは、その [Collision Presets] が何であるかによって異なります。以下に示すオプションをご確認ください。

画像をクリックするとフルサイズで表示されます。

[Overlap All (すべてオーバラップ)] に切り替えると、プレイが始まるとすぐに、スタティックメッシュがレベルを通り抜けるのがわかります。レベル内のさまざまなオブジェクトにメッシュがどのように応答するかを手動で設定できるカスタム プリセットもあります。

ポーンをブロックしたいものの、発射物をオーバーラップさせ、他のすべてを無視したい場合もあると思います。カスタム プリセットでは、スタティックメッシュにそれを行うように指示できます。

レベル エディタで スタティック メッシュ アクタを選択する場合、またはブループリント エディタなどの スタティック メッシュ コンポーネント を選択する場合、[Details] パネル ->[Collision Category (コリジョン カテゴリ)] ->[Collision Presets] には Default (デフォルト) が表示されます。デフォルトは、コリジョン プリセットが最初に設定されたものから変更されていないことを示しています。BlockAll など、他の何かがここにリストされている場合は、選択したスタティック メッシュ アクタ / コンポーネントのコリジョン プリセットがオーバーライドされていることを示しています。

画像をクリックするとフルサイズで表示されます。

メッシュにコリジョンを設定したので、これをレベルに配置し、コリジョンを使用して、他のオブジェクトと相互にどのように影響を与えるのかを設定する準備が整いました。

Unreal Engine でのコリジョンについて引き続き学習するには、「コリジョン」を参照してください。

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