Unreal Engineでスライドするトグルボタンを作成

# 初めに

Unreal Engineで下図のようなスライド式のトグルボタンを作成する方法の備忘録です。
テクスチャとマテリアルを使った方法など、他にも実装方法はあると思いますのであくまで1例と考えていただけると幸いです。

# 環境

Windows10
UE4.27.2

# 実装

### ①Borderに丸角を適用するためのマテリアル作成
BorderやImageに丸角をつけるためのマテリアルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/9d96f459-3665-4a5e-8cc8-af89b9eb0934.png)

### ②Widgetの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/9a3fc5f2-672f-dd63-fd18-690143841108.png)
全体的な構成は図の赤枠の通りです。
元からあったCanvas Panelを右クリックで「Wrap With...」を選択してScale Boxを選びます。
こうすることで使用する側で大きさを自由に変更することができます。
Canvas Panelの中にBorder（灰色の楕円）とButton（白色の円）を配置します。
最終的にはアニメーションを設定してこのButtonの位置を変更していきます。

#### Borderの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/92b37661-0e41-bdba-e705-610a56d79d4e.png)
■Appearance項目
・Image：先ほど作成したマテリアル（M_Circle）
・Draw As：Box
・Margin：0.5
・Brush Color：好きな色（今回は灰色にしました）

■Slot(Canvas Panel Slot)
・Size X：好きなサイズ（今回は64にしました）
・Size Y：好きなサイズ（AppearanaceのImage Sizeと同じにすると両端がきれいな半円になります）

#### Buttonの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/a0ad8542-f683-0525-07a7-cd8b5bec9457.png)
■Appearance項目
・Image：先ほど作成したマテリアル（M_Circle）
・Margin：0.0

■Slot(Canvas Panel Slot)
・Position X：好きなサイズ（今回は左端の半円の中心に合わせるために4にしました　※Anchorが左上の状態）
・Position Y：好きなサイズ（今回は左端の半円の中心に合わせるために4にしました　※Anchorが左上の状態）
・Size X：好きなサイズ（今回は24にしました）
・Size Y：好きなサイズ（今回は24にしました）

### ③アニメーションの作成
ボタンが押された際にButtonが左右に移動するアニメーションを作成していきます。
アニメーションはGraphの方で「再生」、「逆再生」、「繰り返し」が選べるので1つのアニメーションを作成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/2cccc135-24ff-bce6-0fe5-9e1845b70c19.png)
画面左下の「＋Animation」ボタンからアニメーションを追加します（SwitchAnimationと命名）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/d7165905-c004-7e27-4439-778e1afd5ee9.png)
作成したアニメーションを選択してTimelineタブに切り替えます。
HierarchyからButtonを選択した状態で「＋Track」ボタンを押して「Button(Canvas Panel Slot)」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/28e499b4-c167-2b57-1318-f14b2622838b.png)
CanvasPanelSlotの項目が追加されるので、右側にある「＋Track」ボタンをクリックして「Layout Data.Offsets」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/d846ba64-27dd-e971-d3af-46b1917981a9.png)
Offsets(Layout Data)の項目が追加されるので右側にある＋ボタンを押します。
これで0秒の時のButtonの位置が記憶されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/80cd46c8-8117-b110-5cba-248b21632028.png)
赤い部分をドラッグして秒数を調整します（今回は0.15秒に設定）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/c0829dd8-c778-dba5-80ac-b0a345aa7639.png)
ButtonのPosition Xの値を36にします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/39c7a6e0-4e96-4f5c-2831-899021065e49.png)
Timelineの＋ボタンを押します。
これで0.15秒の時のButtonの位置が記憶されます。

### ④ボタンを押すとアニメーションが再生されるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/499cc131-f456-2dde-c83e-6acbaaa2dc2d.png)
ButtonのOn Pressedイベントを有効にします。
Switch AnimationからPlay Animationを選択します。Play AnimationノードのPlay Modeでアニメーションの再生/逆再生を選択することができるので、
今回はBooleanのIsOnという変数でトグルボタンの状態に応じて再生/逆再生を切り替えるようにしました。
また、トグルボタンの背景色もIsOnがTrueとFalseの際に色を分けるようにBorderに設定しています。
初期状態でOffの状態にしたいのでEvent ConstructからPlay Animationにピンをつなげておきます（IsOnのデフォルトがfalseの場合）
![ToggleButton.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/9bc1e773-3a9e-6341-bf50-f674cf281387.gif)