［UE5］パラシュートで浮いているような状態を作る

# 概要
この記事では、Unreal Engine 5 で、下の動画のような、プレイヤーがパラシュートで浮いているときのような状態を作ります。


<iframe width="640" height="360" src="https://www.youtube.com/embed/rmCG50XSCYU" title="parachute 1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

※この記事では、上の動画のようなものを作ろうとして、失敗したことについても記載しておりますので、成功したことだけご覧になりたいという方は、[こちら](#プレイヤーの速度が一定以下にならないようにする)からご覧ください。


# この記事の主な対象者
- Blueprint（BP）の作り方の基礎を習得されている、初心者の方


# 重力加速度を変更してみた（失敗）

失敗談の1つです。

「ふわっと浮いている状態にしたいのならば、受ける重力を小さくすればいいのでは？」と考え、プレイヤーが受ける重力を小さくしました。

プレイヤーのBPを開き、下図のノードを組みました。下図のノードでは、プレイヤーが受ける重力を0.1倍にしています。

![gravityscale1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/f5f0f08c-306f-916a-3da3-6da713b5c756.jpeg)<br><br>

ゲームプレイしてみると、下の動画のようになりました。

<iframe width="640" height="360" src="https://www.youtube.com/embed/bVsm2HuuKOc" title="parachute 2" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<br><br>

上の動画は、一見問題なさそうに見えるのですが、下図のノードに変更してみると問題がわかりやすく見えるようになりました。下図のノードでは、プレイヤーが受ける重力を0.5倍にしています。

![gravityscale2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/75e6a392-a4d0-93f1-d781-2fea8304fc86.jpeg)<br><br>

ゲームプレイしてみると、下の動画のようになりました。

<iframe width="640" height="360" src="https://www.youtube.com/embed/Lrizwaa3aVI" title="parachute 3" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

上の動画からわかるように、プレイヤーの受ける重力が小さくなり、落下速度は遅くなっていましたが、落下する距離が長くなるごとに落下速度が加速してしまっていました。

パラシュートで浮いているように見せるには、等速度で落下するようにならないといけないので、失敗です。


# プレイヤーに力を加えようとした（失敗）

2つ目の失敗談です。

パラシュートが等速で落下する仕組みは、下図のように空気抵抗と重力の力がつり合うことで、加速することがなくなり、等速で落下するようになるというようになっています。

![parachuteforce_exp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/36c5c929-abb1-4f17-99b6-d9645f76d4ef.jpeg)

そのため「プレイヤーの落下速度に合わせて、プレイヤーに空気抵抗の力を加えてあげればよいのでは？」と思い、落下中のプレイヤーに力を加えてあげようとしました。<br><br>

しかし、プレイヤーに力を加えるという処理ができませんでした。

![notaddforce.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/c22bfe4f-15cd-f2dc-e4bf-ec5c9dd9bbf4.jpeg)

アクタに力を加えるには、上図のノードを使用するのですが、下図のノードを使ってアクタに力を加えるためには、力を加えるアクタのメッシュやカプセルコリジョンの設定の「Simulate Physics」にチェックを入れて、物理演算を有効にする必要があります。

そのため、プレイヤーのカプセルコリジョンやメッシュの設定の「Simulate Physics」を有効にしたのですが、物理演算を有効にすることで、プレイヤーに入力を送ることができなくなり、コントローラでプレイヤーを動かすことができなくなってしまいました。<br><br>

**(追記)**
「Launch Character」というノードを使用すれば、プレイヤーに力を加えることはできそうです。今回の記事の完成物より、よりリアルな感じでパラシュートで落下しているようにしたいのでしたら、「Launch Character」ノードを利用して、上の理論を実装するとよいかもしれません。

# プレイヤーの速度が一定以下にならないようにする

成功談です。

「プレイヤーの落下速度を等速度にしたいのならば、落下速度が特定の値より小さくならないようにすればよいのでは？」と考えました。

最初に、プレイヤーのBPのイベントグラフを開き、処理の実装に必要な変数を作成しました。下図の変数には、パラシュートで降下しているときの、等速度の速度を設定しました。今回の記事では「-500」と設定しました。

![parachutevelocityz.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/a0286f2f-335d-989d-90cc-73a3d6961b05.jpeg)<br><br>

次に、下図のノードを組みました。下図のノードでは、プレイヤーのZ軸の速度が、上で設定したパラシュートの速度未満になったら、プレイヤーのZ軸の速度を、上で設定したパラシュートの速度にしています。

![resetvelocity.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/edd29a9b-6457-46ee-f8b3-66aba54a8e05.jpeg)<br><br>


ゲームプレイしてみると、下の動画のようになりました。

<iframe width="640" height="360" src="https://www.youtube.com/embed/Z0eYPC_i_bE" title="parachute 4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

等速度で落下するようになり、パラシュートで浮いているような状態になりました。

しかし、設定したパラシュートの速度になるまで、普通に落下しています。落下開始から受けるはずの、空気抵抗の力を考慮することができていない状態にありました。<br><br>


なので、疑似的にその状態を再現するために、下図のようにノードを組み替えました。

![resetvelocityandgravityscale.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/e904d9a0-ed8e-b50d-1df8-c8a5959d3239.jpeg)

上図のノードには、プレイヤーが落下し始めたら、受ける重力を0.5倍にする処理を加えています。<br><br>


ゲームプレイしてみると、下の動画のようになりました。

<iframe width="640" height="360" src="https://www.youtube.com/embed/rmCG50XSCYU" title="parachute 1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

落下し始めたときもふわっとしているとともに、等速度で落下するようになり、パラシュートで浮いているように見えるようになりました。今回の記事では、この状態を完成の状態とします。
<br><br><br>



以上で今回の記事の内容は終了です。
最後まで読んでいただき、ありがとうございました。