BLOGブログ

2024.02.16UE5UE/ 初心者向け

[UE5]初心者向け!物理シミュレーションでアセットを押してみよう


執筆バージョン: 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に書き換えます。

最終的には以下のようになります。

 

これでトランポリンの完成です!

 

 

高台の高さを調整して遊んでみました。