執筆バージョン: Unreal Engine 5.3
|
こんにちは!今回は第21回ぷちコンのテーマ「おす」にちなんで、
「物理シミュレーションでアセットを押す」方法について解説しながら
「足場をうごかして高台に登るギミック」を作成していきます。
足場を動かす以外にも、箱を押してスイッチを踏むギミックなどにも応用できそうです。
完成イメージはこちら!
●高台を用意しよう
ThirdPersonテンプレートを用意し、初期レベルに配置されている円柱を引き延ばして高台にします。


スケールZを2.5に変更します。
●アセットをプロジェクトに追加しよう
Megascansから以下のアセットを追加していきます。
https://quixel.com/megascans/home?assetId=ukmpbbsaw

WindowタブからQuixel Bridgeを開きます。

検索欄に「Wooden Music Chair」 と入力します。

以下の手順でプロジェクトに追加します。

Megascansについてはこちらを参考にしてください。
参考:[UE5] 無料で使える高品質アセット”Megascans”がドラッグ&ドロップで簡単に配置できる! Quixel Bridgeを使ってみよう
●コリジョンを作成しよう
先ほどMegascansから追加した椅子には、物理シミュレーションで使用される「単純なコリジョン」が用意されていません。
自分で作成する必要があります。
編集画面を開きます。

CollisionタブからAdd Box Simplified Collisionを選択します。


単純なBOX型コリジョンの追加ができました。
コリジョンの作成について、詳しくはこちらを参考にしてください。
参考:[UE5] スタティックメッシュにコリジョンを設定する方法
参考:[UE4]コリジョンの作成方法のまとめ
●物理シミュレーションで動かそう
それでは、この椅子に物理シミュレーションを適用させていきます。
今回は拡張性を考慮して、Blueprintとして実装してみましょう。
まずは新しいブループリントクラスを作成します。
Content直下に新しいフォルダを作成し、「Blueprints」と名付けます。


作成したフォルダを開いた状態で、新しいBPクラスを作成します。

Actorを選択しましょう。

作成したブループリントの名前を「BP_Chair」に変更します。
ダブルクリックして編集画面を開きます。

StaticMeshを追加し、Chairと名付けます。

詳細タブを開き、先ほどの椅子のメッシュをChairのStaticMeshに設定します。

スケールを変更します。
Mobility(可動性)がMovableに設定されていることを確認し、
Simulate Physics(物理シミュレーション)を有効化します。

レベルエディタに戻り、作成したBP_Chairをレベルに配置します。

プレイして、椅子を動かしてみましょう。
くるくると回ってしまい押しづらいです。
●回転を制限する
BP_Chairの編集画面に戻り、コンストレイントの設定から回転を制限します。
XYZそれぞれのチェックボックスをONにすると、その軸での回転(ピッチ、ロール、ヨー)を禁止することができます。


回らなくなりました!
椅子を押したあと、滑っていくのが気になります。
●質量を変更する
もう一度BP_Chairを開いて、質量を600Kgに変更しましょう。

これで大きくて重い椅子を押しているような手ごたえになります。
完成です!
おまけ
アクションゲームっぽくなるように、BP_Chairを「乗るとプレイヤーが跳ねるトランポリン」に改造してみます。
BP_Chairを開きます。
ビューポートを開きBox型のコリジョンを追加して、「Jump Trigger」と名付けます。
プレイヤーが上に乗ったとき反応するように大きさと位置を調整します。


コリジョンにプレイヤーが触れたとき、ジャンプさせるしくみを作ります。
On Compornent Begin Overlapイベントを追加します。

自動でイベントグラフの画面に切り替わります。
ノードの右側にある白い矢印ピンから線を引っ張ってノードを追加していきます。
それ以外のピンから引っ張ったり、なにもないところで右クリックしてもノードを追加できます。

同じ手順で画像のようにノードを組みます。(「==」ノードは「Equal」という名前で、「=」と検索しても出せます。)

物理制御されたアクタに力を加える方法としてAddForceやAddImpulseなどの関数が知られていますが、
プレイヤーはCharacterMovementコンポーネントで動いているのでそれらの関数で動かすことができません。
ジャンプさせるには、Velocityを追加/変更してキャラクターを飛ばすLaunch Character関数が有効です。
今回は真上に飛ばしたいので、VelocityのZの値を1500に書き換えます。
最終的には以下のようになります。

これでトランポリンの完成です!
高台の高さを調整して遊んでみました。