見出し画像

UE5でオクトラ風ゲームをつくりたいっ日記 24/1/19

はじめに

いきなり日記始まってるけど、ここまでの中身についてもすぐに書いて出します。
(追記)あ、出しました。

といっても自分が見返せるように作るだけなので誰かが見ることを考慮してなくて見づらいかもしれませんが予めご了承くださいな。


エンカウント機能試作

ぶつかると…
バトルの画面に遷移

EventHitを使って作成。ぶつかると遷移してるだけ。

技使用時の敵選択機能

後ろのはマウスをホバーしてるときの色

それぞれ矢印用のウィジェットを作って、敵それぞれのコンポーネントにアタッチしてるだけ。
選ぶ処理に関して、矢印はボタンになっており、押すと、
押されたボタンに対応したターゲット変数を飛ばしてイベントを通知させてる。あとはbranchでちょこちょこ作った。
敵の数の上限を決めておけばここから苦しむことはあんまりなさそう?

エンカウント時の「敵の数」

とりあえずのコード

敵のブループリントで当たったかどうかをチェックする変数を持たせることで多重ヒットを未然に防いだつもり。
パーシスタントレベル間のやりとりはインターフェースを使えなかったので、敵には「敵の数」の情報だけを持たせてバトルのレベルに送ることにしたけど、敵の種類の情報とかはどうやって実装しようかな…
GameInstanceなるものが使えるらしいので、今後検討してみる。

レベルというのは大変難しい

バトル終了時の画面からマップに遷移しようとしたんだけど…
レベルを切り替えたから初期化されちゃった…
もしかして「ゲーム」っていうでかいレベルの中に、途方もない数のサブレベルを格納するしかないのか…!?
(追記:解答編↓)

レベルを切り替えたときのスポーン

RPGでバトルが終わったら、マップの元の位置に戻りたいじゃないですか?
でもマップとバトルのレベルは別だから、バトルが終わった後にマップのレベルを呼び出すと位置も初期化されちゃって…
なんとかなれー!で触ってみたのがGameInstanceです。
(ちいかわだとハチワレがすき)
私も詳しくは理解していませんが、1ゲーム内で共通して使える(初期化されない)便利なクラス?だと考えています。
某マリオのコインやらメダルやらとかね。

ブループリントクラスから親クラスをGameInstanceにして作成。
GI内にずっと保持しておきたい変数を追加します。
今回はバトル開始時(敵に触れたとき)の位置を保存したいので、Vector型

そうして、敵に触れた際にGIの変数にアクセスして値をセットします。

あとはマップに遷移した際に、ゲッターから引っ張ってプレイヤーの位置を変えれば完成!
初期値を最初のスポーン時の位置と同じにしておけば、特に変な動作もしないので安心です。たぶん。後から悪さしたらかなしい…なえぽよになるな…

この記事が気に入ったらサポートをしてみませんか?