初心者向け！UE4で球を左右にキー操作するブループリント

#はじめに
自称Unityチョットデキル者ですが、最近UE4ブループリントの勉強を始めました。
初心者向けの記事が少ないので、ちょうど自分にとってこういうやつほしい的な記事を書いてみました。

#前提情報
・バージョン4.25.0
・Windows10 64bit

#やりたいこと
・空中に浮いている球(Sphere)を「A」「D」キーで左右（Y軸）に動かしたい。

#レベルの用意

・新規プロジェクトでBlankを選びます。
・レベルに以下のアクタを配置します。

###（１）スフィア(Sphere)
床のちょっと上ぐらいに適当に配置します。（下のトランスフォーム参照）
以下、詳細の各項目を設定していきます。

●トランスフォーム
・動かしたいので「可動性」を「ムーバブル」にします。
![qt_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/d812e060-b63c-d5a9-0ed4-08033baddfcb.png)
●物理
・物理挙動を有効にするため「Simulate Physics」のチェックを入れます。
・今回は無重力でやりたいので「Enable Gravity」のチェックを外します。
※ちなみに「Enable Gravity」をチェックするとコロコロ転がるやつになります。
![qt_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/f26fa51e-b8b6-5ac3-cb71-a18723fc29b0.png)

●マテリアル
・お好みで目立つ感じに設定するとよいでしょう。
![qt_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/11170d8e-bbab-2f72-589d-809c525cf305.png)

###（２）カメラ(CameraActor)
Y軸方向に動くスフィアが見えるように、いい感じに配置します。
![qt_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/0ce5b9c0-a774-1fed-0686-2fa040cad339.png)
![qt_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/a143e303-7798-9da5-1de9-75c9b02591ab.png)


#レベルブループリント
ツールバー「ブループリント」から「レベルのブループリントを開く」を選択します。

###変数の設定
●IsKeyDownA (Boolean型）
・Aキーが押されていたらTrueをセットするフラグとして使います。
・デフォルト値はFalse（チェックを外したまま）

●IsKeyDownD (Boolean型）
・Dキーが押されていたらTrueをセットするフラグとして使います。
・デフォルト値はFalse（チェックを外したまま）

※デフォルト値がない場合は、一度コンパイルすると出てきます。
![qt_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/b312acd9-eaa2-ca80-7177-5475ac34daf9.png)　![qt_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/a7563bd3-c2c3-7dad-c350-7945afaa6720.png)

レベルブループリントで以下の３つの処理を作ります。
（コメントで各処理をまとめています）

###（１）実行開始処理
![qt_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/c04f3bd4-fdc9-c66c-b8ed-6f6f3ae5fde5.png)

BeginPlayノードから以下のノードへ処理をつなげます

●SetInputModeGameOnly
・実行時のモードをカーソル非表示、キー入力即時受付け状態にします。
・GetPlayerControllerノードの出力をつなげます。

●SetViewTargetwithBlend
・レベルに配置したカメラアクタをビューターゲットに設定して固定カメラにします。
・GetPlayerControllerノードの出力をつなげます。

※CameraActorノードはノード検索やワールドアウトライナからドラッグ＆ドロップで配置できます。
※ノード検索で「状況に合わせた表示」のチェックを外すとSetViewTargetwithBlendが出てきます。

###（２）キーダウン判定処理
![qt_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/53f8b512-4eee-4879-688f-66a0749c8fc1.png)

●（キーボード）A
・右クリックのノード検索から「キーボード A」などで検索できます。
・Pressed（押し下げた瞬間）にセットIsKeyDownAノードをチェックON(True)でつなげます。
・Released（押し下げたキーが上がった瞬間）にセットIsKeyDownAノードをチェックOFF(False)でつなげます。

●セットIsKeyDownA
・変数のIsKeyDownAをドラッグ＆ドロップして「SetIsKeyDownA」を選んで配置します。
（ノード検索から検索もできます）

●（キーボード）D
・Aと同様にIsKeyDownDノードをつなげます。

●セットIsKeyDownD
・変数のIsKeyDownDをドラッグ＆ドロップして「SetIsKeyDownD」を選んで配置します。

###（３）球アクタ移動処理
毎フレーム呼ばれるTickノードでフラグがONならフォース（理力）を加えて球を移動させます。
![qt_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/407de70e-5639-b618-6b8b-3cd0c8e9a518.png)

●Sequence
・正確には「一連のピンを順番に実行」ですが、1フレーム内の話なので人間的には並列で処理してくれるやつです。
・まずDの処理、次にAの処理と直列でもできますが、個人的な好みでSequenceで並列的に作りました。ここはお好みでどうぞ…

●ブランチ
・if文と同義の条件分岐処理です。
・「IsKeyDownA」「IsKeyDownD」がTrueならAddForceノードを実行します。

●AddForce（IsKeyDownDがtrueの場合）
・カメラから見て右手がY軸+方向なので、DキーでY方向に500加算します。
・Sphereアクタのノードをドラッグ＆ドロップまたはノード検索で置いてつなげます。
（「ターゲット Static Mesh Compenent」は自動で間に挟まります）
・アクタの質量を無視したいので「AccelChange」をチェックします。
（質量の影響を受けると動きが鈍くなるので…加算値をもっと大きくしてもよいのですが）

●AddForce（IsKeyDownAがtrueの場合）
・カメラから見て左手がY軸-方向なので、AキーでY方向に-500加算します。
・Sphereアクタのノードをドラッグ＆ドロップまたはノード検索で置いてつなげます。
・アクタの質量を無視したいので「AccelChange」をチェックします。

~~すいません、加算値500は直値で入れてます。みんなはちゃんと変数でやろうね！~~

![qt_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166815/c0bba4c0-5ae7-3b55-a1eb-24c3d44647c9.png)
はい、できました！
ツールバー「プレイ」で実行したら「A」「D」キーを押して球を左右に動かしてみてください。

#おわりに
主に自分用に作った記事ですが、参考になれば幸いです。