【UE4】アニメーションBPの共有(3)

<h2>キャラクターの切り替え</h2>
第一回
https://qiita.com/KLaboratory/items/ab938c45c2c7106b65f6
第二回
https://qiita.com/KLaboratory/items/fecb657668215e48660d
から続きます。今回はMaria JJ Ong とMaria W/Prop JJの切り替えについて。キャラクターの切り替えについては、以前に作りましたこの記事を参考にしてください。
https://qiita.com/KLaboratory/items/59538687594e2ffe5d2a
https://qiita.com/KLaboratory/items/af3c63d7db4a0ccaaff7
<h3>ゲームインスタンス</h3>
変数をやり取りするためにゲームインスタンスを作ります。プロジェクト設定のマップ＆モードの一番下のゲームインスタンスに登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/3faf3bb2-fd66-59ff-171e-23b0ecaa5a65.png)
今回はbool変数を一つだけ登録します。これはキャラクターが通常系か進化系かを判断するものとします。通常系がfalse、進化系をtrueとします。最初は通常系なので初期値はfalseにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/e8c92822-e7aa-d67b-791d-dad2f124e27d.png)
<h4>切り替えコマンドの登録</h4>
プロジェクト設定のインプットのActionMappingsにキャラクターを切り替える(進化させる)コマンドを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/2f950a08-94f3-78f0-e858-4d840c16bfb8.png)
<h4>コントローラーBP</h4>
コントローラーBPに戻ります。先ほど登録した進化コマンドを呼び出します。現在のキャラクターの位置を取得して、Destroyします。ゲームインスタンスについては次に出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/c3885efa-e4f6-697b-605a-3d17ce27b251.png)
ゲームインスタンスの変数を取得し、trueであれば進化系になっているのでfalseに戻し、falseであれば進化系になるのでtrueにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/33e671f7-80d0-8967-689e-0b665e2014a9.png)
先程取得した位置にキャラクターをspawnさせ、コントローラーをpossessします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/e8f19cff-09d2-fd7f-3be2-849ea609925e.png)
コマンドを入力するたびにMaria JJ Ong とMaria W/Prop JJが入れ替われば成功です。
<h3>攻撃コマンド</h3>
プロジェクト設定のインプットに攻撃コマンドを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/2691ead1-6c44-fe83-c722-29db83dee222.png)
<h4>コントローラーBP</h4>
コントローラーBPに戻ります。アタックのコマンドを呼び出します。コマンド実行の間、他の動きを止めます。delayの時間は、アニメーションが再生される時間です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/b1b63bf6-ab09-065d-a517-7004d8e6ecae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/3a046387-d85d-e5c8-2ee2-a627a5e5d438.png)
<h3>アニメーションBP</h3>
アニメーションBPに移ります。まずイベントグラフにAttack用の処理を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/8a843967-0bba-ceba-2647-26309e8ea1a9.png)
コントローラーから、Attack変数の状態を受け取り、アニメーションBPの変数にセットします。続いてAnimGraphです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/3a8fff14-3c95-babd-b609-50c3329cb264.png)
Attackステートは、歩きながら、あるいはIdleから発せられますが、終わったときは必ずIdleに戻します。AttackのアニメーションはMaria JJ OngのPunchingをわりあてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/50e488b5-adfa-7bee-031f-41aceb9d876c.png)
トランジションルールはAttackに行くときはそのまま、Attackから戻るときはNotを割り当てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/9fdb6592-b4fa-8c4a-5ece-41e9738949ca.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/46e0ccf8-9722-5950-4da5-5f4333aed4fe.png)
実行すると、パンチをしますがMaria W/Prop JJにチェンジしても剣を持ったままパンチをします。これをMaria JJ Ongのときはパンチ、Maria W/Prop JJになると剣で切ると分けたいと思います。これはとても簡単ですが一つ仕掛けが必要です。
<h3>アニメーションの切り替え</h3>
イベントグラフに戻ります。イベントグラフにbool変数を一つ加えます。これは今が通常系か進化系かを判断するものです。これをゲームインスタンスから持ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/b5bd4544-936c-6578-82bb-068d240264eb.png)
これで今、通常系か進化系かがわかります。続いてAnimGraphのIdleステートに入ります。Great_sward_Idle1をつなげたいのですが、Output Animation Poseは一つのアニメーションしかつなげません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/b40a76dc-4eba-e005-ae23-66a2ec290f41.png)
そこで<b>Blend Poses by bool</b>を使います。true(進化系)のときはGreat_sward_Idle1になり、falseのときは通常のIdleになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/bc41ecd3-5ad4-c0b0-af75-5c6fccb51ae6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/9cf5ea3e-d906-a334-fc01-7b5156c3fbc0.png)
Attackステートも同じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/82624ae5-ca6b-6106-330b-7d55f6073b1d.png)
なお、Blend Poses by boolの詳細で、「Blend Time」のチェックは外しておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588692/a1deaffa-d93e-438d-9c21-8219e8601e9c.png)
実行すると、IdleとAttackの動きが違っていることがわかります。ただ、Attackの時間が違うので、パンチが4回出たりします。ここはコントローラーBPで調整をしてみるといいと思います。

こうすることで、アニメーションBPを一つにして、手間の節約になりました。またご覧いただきますとわかりますが、コントローラー共通で使えます。そして、キャラクターのBPには何も書いていません。複数キャラクターを使い分けるときはこの方法も悪くないと思います。

今回は剣を装備しただけなので、一つのキャラクターでソケットをつけて、そこで装備したり非装備にしたりとすることもできます。ただ、メッシュ(見た目)まで変わる場合はこの方法の方がやりやすいかと思います。