にわとりがよく使うBPノード整理術


##はじめに
本記事はBPをあまり使たことない人やUE4初心者（本物）の人を対象に
僕自身が普段BPを書く際に気を付けている事や便利だな～って思った事をまとめた物になります。

##環境
UE4.25.4 で動作確認を行ってます。


##本編


###既存のノード関数化
すでにあるノードを範囲選択して右クリックから「Collapse to Function」を選択すると
選択しているノードが関数化されます。
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/d760e801-9cb7-6b48-c429-3f0abadba5c6.gif)

ちなみに引数にしたい変数ノードを選択しないで関数化すると勝手に引数にしてくれるのでめっちゃ便利です。
（intとかfloatならいいのですが、Actorとかユーザー定義のクラスだとめちゃんこ便利に感じます。
![Videotogif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/28d5e7f5-fe83-96db-3ba7-190e78c21b1d.gif)



###Sequence
つづいてはSequenceノードです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/bcc2cd74-1e41-a74c-2fed-a06fca32bd5b.png)


SequenceノードはThen0から始まり、Then1、Then2、Then3 と順番に処理をしていくノードなのですが便利な使い方が出来ます。

下記のような不正な値が帰ってきた時に特定の値(今回はZeroVector)を返す関数があるとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/eeaa1e24-9093-c22b-7092-7acc2ee2f92f.png)

別にこれでも処理上は問題ないのですが、ここでまた不正値を返す条件が増えたときReturanNodeにまた繋がないといけなくなり、かなり手間です。

そこでこのように頭にSequenceノードを仕込んで、Then0の値取得が成功した時だけReturnNodeを呼ぶようにしてやれば
不正な引数が来た際にはThen1の方のReturnNodeが呼ばれるようになり、条件追加の際にも対応漏れなどが無くなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/e11f0525-763a-50f0-ca0e-1d2cc6a49983.png)


###関数内で引数のGetNodeが呼べる
UE4の関数内なら引数をローカル変数としてSetしなくてもGetNodeを呼び出すことが出来ます。
短い関数ならそのままノードを伸ばせば済みますが、長い関数とかになってくるとかなり便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/94f42d8e-28dd-cdd3-c2b7-2762f0d22bc0.png)


###ノードピンから変数追加（ローカルも
変数のノードピンを引っ張って離すと下記の画像のようなコンテキストメニューが表示されます。
引っ張っている型のローカル変数と変数がワンポチで作れてしまうのでめっちゃ便利です。

| 名前 | 用途 |
|:-:|:-:|
|  Promote to local Variable     |   ローカル変数作成      |
| Promote to Variable | 変数作成 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/b4803e6a-e188-35a1-c690-50f4087e2e4c.png)




###RerouteNode
皆大好きRerouteNodeです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/5b5e451c-2bea-6805-83d4-33b5c3da9b84.png)

ちなみに僕はコンテキストメニューから「rero」って打って出してます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/4a39043b-0d27-3fee-c527-23b7d98d76a3.png)
BPのノードの整理とかによく使われているRerouteNodeですが、僕みたいなめんどくさがりな人には特に便利な使い方が出来ます。

このようにActorの情報をデバッグ表示で出していて、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/17c7d2d2-62d0-e97a-2b4f-ebae0b59d525.png)

別のActorの情報を見たいときまた三つ共ノードを繋げるのめんどいですよね？（一旦Ctrl+右ドラッグは忘れましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/9ec31ff7-3c29-450f-ec98-3c0722ada48b.png)

そんな時RerouteNodeを介して繋いでおけば、次に別のActorを確認したい時はマウス操作のみ＆ワンスライドで変更することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/39bda965-4b29-3a55-61a2-0425fc2dde54.png)

最初は「Ctrl+右ドラッグ」でやっていたのですが、だんだん両手を使うのがめんどくさくなってきた結果これを多用するなりました。皆さんも是非！

###コメント
下記のように選択した状態でCキーを押すとコメントが生成されます。
![Videotogif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/cc257650-a608-9ad7-54dd-ae6f7e62e36f.gif)

BPの書き方や書いている状況によっては、他人が見るとぱっと見で何の処理をしているかわかりにくい時があると思います。
しかし、BPの処理を読み解くのに費やされる全体の時間はそれを読む人に比例して多くなっていきますし、その他人はもしかしたら一か月後の処理をさっぱり忘れた自分かもしれません。

少しでも読み解く時間を減らすためにも、ぱっと見で何をしているかが理解出来るように全体の処理を要約したコメントはもちろんのこと
コードを読んだ人が疑問に思うであろう事があらかじめ予測できる場合は、なぜその処理をしたか等をなるべくコメントを残すようにしましょう。


このコメントは設定によって内部のノードを一緒に移動させたり色を変えたりできるので是非有効活用してください。
![Videotogif (4).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/a9e00fa8-757f-706a-e60b-67cca69954fa.gif)
![Videotogif (5).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/fcab3ad0-6828-a62d-f3ff-86ac28c0e4de.gif)


##番外編

###FindInBluePrint
公式ドキュメント
https://docs.unrealengine.com/en-US/Engine/Blueprints/Search/index.html

BP上で「Ctrl+Shift-F」を押すとBPの全体検索が出来ます。
「ParentClass=Actor」と記載するとActorを親としているBPが検索出来たりめちゃんこ便利です。
もちろんユーザー定義クラスも検索出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386876/cad6892b-26a7-524e-fd5a-7ec427cd192e.png)

###コンテンツブラウザ上でリダイレクタを検索する方法
別記事で紹介しているので是非ご覧下さい
https://qiita.com/kamitani_08/private/13f58d100241a7a6fb03

##おわり
以上となります。
BP初心者向けという事で誰かのなんかしらのいい感じな助けになれば幸いです。

明日はNiagara芸人でおなじみの [Wataru](https://qiita.com/WataruVFX) さん！
なんとプロジェクトファイルもあるとの事で、全力で正座してお待ちしております！！！！！