［UE5］特定の位置にあり、当たったら揺れる提灯を作る

# 概要
この記事では、Unreal Engine 5で、下のような提灯を作ります。

特定の位置にあり、当たったら揺れる提灯

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

（※この記事では、提灯のメッシュやマテリアルの作り方をお教えするわけではございません。）


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


# 事前準備
提灯のメッシュの原点を、提灯を揺らす際の支点とする部分に設定してください。

![lantern_basepoint.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/e94b864e-4618-f2fb-946a-3d4fae8ea8c4.jpeg)

# 特定の位置で決まった揺れ方をする提灯の作り方

この章では、下の条件を満たす揺れ方をする提灯の作成方法を記載いたします。

- 特定の位置にあり、座標が変わることはない
- 提灯に、ほかのアクタが当たったら揺れる

## 1. 提灯のBPを作成する
まずは、下の画像のような、コンポーネントの構成のBPを作成します。

**※PhysicsConstraintとLanternの座標を同じにするようにしてください。**

![lantern_components.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/a4ccded0-8875-7ed5-2de3-76ec9534cd60.jpeg)

|コンポーネント名|コンポーネントの種類|備考|
|:-:|:-:|:--|
| DefaultSceneRoot | Scene | このコンポーネントを一番上の親にします。 |
| PhysicsConstraint | Physics Constraint | 提灯を振り子みたいに動かすために使用します。 |
| Lantern | Static Mesh | 提灯のメッシュです。 |
| WoodPole | Static Mesh | 提灯を取り付ける棒です。<br>これは提灯が揺れていることを<br>わかりやすく確認するためにつけたものですので<br>なくても大丈夫です。 |


## 2. 提灯が振り子みたいに揺れるようにする

コンポーネント一覧から「DefaultSceneRoot」の下の「PhysicsConstraint」を選択し、「PhysicsConstraint」コンポーネントの詳細パネルを開きます。

詳細パネルの「コンストレイント」＞「Component Name 1」「Component Name」のところに、提灯のメッシュのコンポーネント名（この記事では「Lantern」）を入力します。

![physicsconstraint_lantern.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/0b275c9c-f019-127e-cf84-dc76b352cc35.jpeg)

その後、「PhysicsConstraint」コンポーネントを選択した状態にすると、ビューポートでは下画像のような表示になっているので、確認します。

![physicsconstraint_lantern_viewport.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/c7593701-bd95-a801-e7c7-2a8df04af5f9.jpeg)

最後に、コンポーネント一覧から提灯のメッシュのコンポーネント「Lantern」を選択して、詳細パネルを開き、「物理」＞「Simulate Physics」にチェックを付けます。

![simulate_physics.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/7bb763e1-1678-f020-5ebe-cf1de40fab53.jpeg)


この状態で、振り子のような物理挙動の制御をしてくれるようになっています。

しかし、この段階では下の動画のように、提灯がうまく揺れてくれない状態にあると思います。

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

理由は、提灯を取り付ける棒のメッシュ「WoodPole」のコリジョンと、提灯のメッシュ「Lantern」のコリジョンが重なり、お互いに反発し合っているような状態にあるからです。

なので、次は提灯を取り付ける棒のメッシュ「WoodPole」のコリジョンと、提灯のメッシュ「Lantern」のコリジョンが反発しないようにしていきます。

## 3. コリジョンが反発し合わないようにする

まずは、コンポーネント一覧から提灯のメッシュのコンポーネント「Lantern」を選択し、詳細パネルを開きます。

詳細パネルの「コリジョン」＞「コリジョンプリセット」のところを、「PhysicsActor」から「Custom」に変更します。
そのようにすると、その下にある大量のチェックボックスが編集できるようになります。

その後、その大量のチェックボックスの中の「WorldDynamic」の行で、「無視する」というところにチェックを付けます。

![collision_lantern.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/55659f99-45c3-2b4c-107f-9ae9bf9b50ef.jpeg)

この操作により、提灯のコンポーネント「Lantern」は、オブジェクトタイプ「WorldDynamic」のコリジョンとは当たり判定を持たないようになります。（各コンポーネントのコリジョンのオブジェクトタイプは、詳細パネルの「コリジョン」＞「コリジョンプリセット」＞「ObjectType」からわかります。（上画像の緑丸））<br><br>



次に、コンポーネント一覧から提灯のメッシュのコンポーネント「Lantern」を選択して、詳細パネルを開きます。

詳細パネルの「コリジョン」＞「コリジョンプリセット」のところを、「BlockAllDynamic」から「Custom」に変更した後に、その下のチェックボックスの中の「PhysicsBody」の行で、「無視する」というところにチェックを付けます。

![collision_woodpole.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/e947e88c-1787-54f4-a051-d9047a929399.jpeg)


この状態で、提灯のコンポーネント「Lantern」と提灯を取り付ける棒のメッシュ「WoodPole」のコリジョンは、お互いを無視し合った状態になり、重なっても反発し合わない状態になります。<br><br>

（下の動画の提灯のマテリアルは、問題点をわかりやすくするためにマテリアルを変更しています。）

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

しかし、この状態だと、上の動画ような状態にあり、下のような問題点があります。

- 少し提灯に当たっただけで、提灯が大きく揺れる
- 提灯に当たった際に、提灯が大きく回転する

なので、次からは上記2つの問題を解決していきます。

## 4. 提灯が大きく揺れたり回転しないようにする

今の状態だと提灯が軽すぎるので、まずは提灯を重くしてあまり揺れないようにします。

まずは、コンポーネント一覧から提灯のメッシュのコンポーネント「Lantern」を選択し、詳細パネルを開きます。

詳細パネルの「物理」＞「Mass」のところにチェックを入れ、提灯の重さを重くします。（この記事では「150」に設定します。）

![mass.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/60c23bcf-28c2-f78c-fe88-eac6dad4d9f1.jpeg)

次に、提灯が回転しにくい状態にします。

コンポーネント一覧から提灯のメッシュのコンポーネント「Lantern」を選択して、詳細パネルを開き、「物理」＞「Angular Dampling」の値を大きくします。（この記事では「5」に設定します。）

![angulardampling.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/b80b9706-42da-3d02-9990-8e40c7f74865.jpeg)

これで、回転しにくく、大きく揺れにくい状態になったので、下の動画のような当たったら自然に動く提灯ができているか、確認します。

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