俺にはできないUE4(UE4休止中)

Unreal Engine 4でゲームを作ったりする備忘録だったり、ただの日記だったりする

UE5でイカのゲームを作る_2

 イカのゲームらしきものを作る続きだ。前回は弾を撃てるとこまでやった。今回はイカ変化のところを作ってみる。と言っても勿論イカのモデルなんて用意してないので、機能面でそれっぽくなってればいいことにする。

 とりあえず自機の状態について記憶させておきたいので、それ用のパラメータを作っておく。遥か古の時代のようにIntegerに1が入ってたらアレで~というのでもいいのだが、UE4にもちゃんと列挙型があるのでそれを使ってみる。コンテンツブラウザ+追加か、コンテンツブラウザ内の適当なとこ右クリックしてブループリント列挙型で列挙型を作る。名前はEnum_PlayerModeとでもしておこう。作ったEnum_PlayerModeを開いたら+列挙子を追加でエニュメレーターのとこを3行分作って、それぞれHuman, Ika_NotSenpuku, Ika_Senpuku としておこう。今回はセンプク出来るとこまでやらないが、必要になるというか無いとイカにならないしなー。説明部分は無くてもプレイ中には影響しないが、自分の記憶は当てにならないので書いておく。なんならこのブログ記事も当てにならぬ脳のための外部記憶だ。

 

 列挙型も作ったので、それを覚える変数も作ろう。今回もブループリントは自機であるところのBP_ThirdPersonCharacterを開いてそこに突っ込んでおく。BPを開いた中のマイブループリント変数があるのでそこのを押して変数を作る。名前はPlayerModeにしておく。作ったPlayerModeを選択し、詳細変数の型のところでEnumEnum_PlayerMode(さっき作ったやつ)を選ぶ。デフォルト値はHumanにしておこう。

 そしたらイベントグラフにモード切替を追加する。左クリックが攻撃なので、イカになるのは右クリックでよかろう。マウスの左ボタンイベントのノードを追加して、押したらPlayerModeIka_NotSenpuku、離したらPlayerModeHumanになるように、それぞれSet PlayerModeを配置して繋ぐ。

 

 勿論これだけじゃ実際に形態変化するわけじゃないので、PlayerModeに合わせて変化させる。今度はイベントグラフにイベントイベントTickのノードを配置する。このイベントはボタンを押したりした時じゃなく、毎フレーム自動で呼ばれる。で、このノードにスイッチノードを繋げ、PlayerModeの内容に合わせて分岐させ、形態に合わせてモデルを切り替える……のは出来なくはないが今回は自機のスケールを切り替えて表現してみる。

 1フレームで切り替わると一瞬すぎるので数フレームかけて切り替わるようにしてみよう。それ用の変数を作る。名前はPlayerTargetSalceとする。変数の型Vector。で、各形態ごとにSet PlayerScaleIkaNotSenpukuIkaSenpukuZ0.4にしておく。他とHumanは全部1

 その後、コンポーネントにあるCharacterMovementをドラッグ&ドロップでイベントグラフ内に配置して、それに対して各形態ごとにSet MaxWalkSpeedで最大速度を変更する。Human500IkaNotSenpuku250IkaSenpuku1000としておく。

 さらにその後は、先ほど設定したPlayerTargetScaleに合わせて自機の実際のスケールを変更する。Get PlayerTartgetScaleで取得した数値(Vector)をXYZそれぞれ0.5倍したものと、現在のMeshのスケールを0.5倍したものを足し、Set WorldScale3D(Mesh)Meshのスケールに設定する。Set ActorScale3Dでも見た目のスケールは変わるのだが、このActor全体のスケールが変わるので、マウス右ボタンを連打するとコンポーネントのところにあるカメラと自機の距離も高速変化してしまい、大変気持ち悪くなる。



 形態変化を追加したついでに、Human形態でしか弾を撃てないようにしよう。と言っても、前回作った左クリックで弾を撃つ部分の最初のところに、先ほどと同様にPlayerModeスイッチさせ、Humanの時しか後に繋がらないようにするだけ。

 

 さて、プレイしてみよう。マウスの右ボタンを押していると自機がちっさく遅くなり、右ボタンを押したまま左ボタンを押しても弾は出ない。センプクはまだインクが無いので当然無理だ。前回に比べて手間は増えたが見た目はパッとしないな。果たして最後まで作ることは出来るのだろうか。