PlayerControllerを使って汎用性をもたせる
前回作成したときはまだ覚えたてで、レベルブループリントに直書きしていました。
これでは当然のこと、レベルが変われば同じ処理を書かなければならないですので、
レベルが増えたらとんでもないことになりますし、設計としてもおかしいです。
https://qiita.com/KLaboratory/items/ebc47bcc22fbf9ff6a6e
以来少し上達して初心者から初級者くらいにはなったと思います。
PlayerControllerの使い方を覚え、今回はこれで実装することができました。
更には、少しばかり演出もいれることもできました。
必要なもの
必要というより、今回書いたのは
・PlayerControllerのBP
・アニメBP
だけです。PlayerControllerのBPに移動やジャンプ、その他すべての操作を記載して、アニメBPでそれを動かします。
通常のキャラクターBPには今の所何も書いていません。
指定するメッシュやアニメクラスを指定するだけのために存在しています。
もちろん制作が進めば記載することも出てくると思いますが、
何でもかんでもキャラクターのBPに書かなくてもいいということも少しわかってきました。
PlayerControllerのBP
これが全体図です。
![変身new1.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F588692%2F95926276-2b10-fbde-08c4-74b0bfa74c67.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8d34cffaaf80a657c02dd924ad1f9876)
上半分
![変身new2.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F588692%2F25c1e9eb-c361-76ce-88a9-2158cfe8a385.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=628dced1e69eaf6ab52bfc11420160ce)
変身するコマンドが入力されると、GetPlayerCharacter→GetActorLocationを取得して、キャラクターの位置にパーティクルを出現させます。
CharacterChangeというbool変数をtrueにして、その間にアニメーションBPを動かします。その間delayします。
2秒というのは変身する間の時間です。これは変身動作によって変えます。変身し終わったタイミングでfalseにします。
ここまでが前半部。次が後半です。
![変身new3.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F588692%2F24b7b843-859d-3d69-74c7-27a200288750.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=30a24c73fbc04fd2e8861b581d8a9b0f)
GetPlayerCharacter→GetActorTransformで現在の位置を取得しセットします。
続いて今のキャラクターをDestroyします。
FlipFlopにしたのは、今回2つのキャラクターを入れ替えるのでこれが便利だったのですが、
キャラクターをたくさん用意しているならば新たに方法を考えなければなりません。ここは今後の私の課題です。
ここでキャラクタをspawnさせます。
![変身new4.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F588692%2F557f40ac-7e70-4287-279d-7f9710579bec.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e0ac3aff87b3cba09f443b76260ceb55)
コントローラーを紐付けるためGetPlayerController→Possessとします。
最後に、パーティクルを消して完了です。
アニメBP
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F588692%2F604bb227-01ef-a68e-d0c3-bfcec5239fe6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d9c56dedae0c2dc9fa6d4f7628468340)
下は移動、回転、ジャンプなのでよくあるものですが、今回関係するのは上の部分です。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F588692%2F23063f75-f9bd-4946-9e29-73c2987432cb.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a607267c93741f838cf977bf4c83dfb8)
GetPlayerControllerからControllCharacterにキャストします。
移動や回転と違って、Characterにキャストしたのではダメでした。理由については勉強中です。
PlayerControllerから取ってきたCharacterChange変数をアニメBPのbool変数にセットします。
そうするとアニメーションが動くということになります。
2秒後にCharacterChangeがfalseになるので、アニメーションが止まるということになります。
まだ覚えることがたくさんあり、また、わからないけど結果的に動いているという好ましくないことも多いですが、
少しずつ理解できたらいいかと思います。これからもよろしくおねがいします。
UnrealEngineここまで上達した。#UE4 #UnrealEngine4 pic.twitter.com/8W5wZ5RzYk
— 特命社長 (@tokumeishatyo) May 15, 2020