執筆バージョン: Unreal Engine 4.26
|
第15回ぷちコンのテーマ「かわる」に因んで
ThirdPersonテンプレートを使い、ゲーム中にグレイマンが変身するという機能を作成していきます。
変身後のBPはCharacter型であれば、本記事の方法で変身が可能です。
今回は事前に作成したキツネのCharacterであるFox Characterを使っていきます。

PlayerControllerを作成する
新規のPlayerControllerBPのFormChange_PlayerControllerを作成します。


GameModeに作成したPlayerControllerを割り当てる
ThirdPersonGameModeが使用するPlayerControllerを作成したFormChange_PlayerControllerに変更します。

PlayerControllerに変身処理を書く
キーボードの「C」を押す度にエフェクトが発生しグレイマンとキツネの姿が入れ替わる、という処理をFormChange_PlayerControllerに作成していきます。
変数作成
まずは変身のための下準備をします。
ThirdPersonCharacter型の変数「ThirdPerson」とFox Character型の変数「Fox」を作成します。

変数「Fox」も上記写真と同様に作成します。
Begin Play
変数が作成できたら、ゲーム開始時に呼び出す処理をBegin Playノードに追加していきます。
「Cast To ThirdPersonCharacter」を使い、ゲーム開始時に操作しているThirdPersonCharacterを変数「ThirdPerson」に登録します。
「SpawnActor Fox Character」を使い、変身後のキツネを生成し、変数「Fox」に登録します。
(Transfromピンを右クリックしSplit Struct Pinを選択すると、Location,RotationScaleのピンに分解することができます)

次に、作成したキツネを当たり判定がなくて(CollisionがNo Collision)見えない状態(Visibilityがfalse)にします。
このCollisionとVisibilityの切り替えはまた使うので、関数を作成して繰り返し使えるようにしましょう。
関数作成
Functionタブから新規関数「Set Character Visiblity and Collision」を作成します。
作成したSet Character Visiblity and Collisionに
Boolean型の引数「VisiblityAndCollision」と
Character型の引数「Character」
Character型のローカル変数「Target Character」を作成します。
(Fox Character型ではなくCharacter型にすることで、ThirdPersonCharacterもCollisionとVisibilityの切り替えができるようにしています)

Set Character Visiblity and Collisionのノードは以下のようになります。
「Set Visibility」でMeshの表示を切り替え、「Set Collision Enabled」でCollisionの設定を切り替えています。

Begin play続き
関数を作成し終わったところで、再びEvent GraphのBegin Playを編集していきます。
作成した関数「Set Character Visiblity and Collision」を使い、キツネのVisibilityとCollisionをオフにします。
「SetActorTransform」を使い、キツネをグレイマンの位置まで移動させます。
「AttachActorToActor」を使い、キツネがグレイマンの動きについてくるようにします。

これにて下準備は完了です。
現在はゲームを開始すると、グレイマンが動いた時に非表示のキツネがついてきているという状態になってます。
inputイベント
続いて「C」を押した際の処理を作成します。
Flip Flopを使うと、ボタンを押す度に実行先が出力Aと出力Bで交互に切り替るため
出力Aにグレイマンがキツネに変身する処理を、
出力Bにキツネがグレイマンに変身する処理を作成していきます。
まずは出力Aを完成させていきましょう。
ただ変身するだけでは見た目が寂しいのでエフェクトを追加します。
「Spawn Emitter Attached」を使い、スターターコンテンツに入っているP_Explosionを発生させます。
「Delay」を使い、エフェクトが出てから0.2秒後に変身する様にします。

変身!
さてここから変身の処理になります。
「DetachFromActor」を使い、グレイマンとキツネのアタッチを切り離します
作成した関数「Set Character Visiblity and Collision」を使い、グレイマンのMesh表示と当たり判定を消します。
同様に「Set Character Visiblity and Collision」を使い、キツネのMeshを表示し、当たり判定を追加します。
「AttachActorToActor」を使い、非表示のグレイマンがキツネについてくるようにアタッチします。
最後に「Possess」を使い、操作するキャラクターをグレイマンからキツネに切り替えます。

出力Aはこれにて完成です。
この状態でプレイすると、「C」を押した時にグレイマンがキツネに変身します。
仕上げ
最後にキツネからグレイマンに再度変身する処理を出力Bに作成する必要がありますが、
使うノードは出力Aと同じためここでの説明は割愛します。(変数Foxと変数ThirdPersonを入れ替えたものです。)
完成後のノード全体は以下になります。

完成した変身はこちら!
是非ぷちコンでのゲーム制作にお役立てください!