フリーランス薬剤師 / 事業主
【UEFN】【verse】マルチプレイにおける二段ジャンプ&空中ダッシュの実装
プロフィールを見ていただきありがとうございます。 私は現在UEFNで2作目の島づくりに取り掛かっております。 島の概要としては空中に配置されているオブジェクトをジャンプして登っていく、いわゆる「Only Up」タイプのゲームです。この島ではプレイヤーは2段ジャンプと空中ダッシュができ、これを駆使してゴールを目指します。 さらに今回はシングルプレイではなく、多人数で同時に参加できるマルチプレイができるようにする予定です。 今回その2段ジャンプと空中ダッシュの実装が完了したのでその実装内容について解説させていただきます。 まず2段ジャンプと空中ダッシュはムーブメントモジュレーターの仕掛けと信号リモコンマネージャーを組み合わせて実現しております。これ自体はすでにYouTube上で解説している動画があるのでそれをそのまま真似しました。 ムーブメントモジュレーターの機能にある「勢い」を活用し、信号リモコンマネージャーのプライマリファイアには上方向の勢いを設定して2段ジャンプを、セカンダリファイアには前方向の勢いを設定して空中ダッシュを実装しました。 またそれだけでは無限にジャンプと空中ダッシュができてしまうため、以下をverseで実装しました。 ①プレイヤーが空中にいないと発動できない。 ②空中で発動できるのは2段ジャンプor空中ダッシュのどちらかを1回だけ。 ③2段ジャンプor空中ダッシュを発動した後に着地するとリセットされて、再度プレイヤーが空中にいくと2段ジャンプor空中ダッシュが発動できる。 これを実現するために、整数型の変数JunpCountを初期値1で定義し、2段ジャンプor空中ダッシュをする前にJunpCount>0であることと、プレイヤーが空中にいるかどうかをif文で確認し、発動後にプレイヤーの着地をチェックして、JunpCountを1にリセットする関数が実行されるコーように実装しました。 しかしこれではシングルプレイでは問題なく動作しますが、マルチプレイの場合は複数のキャラクターで1つのJunpCountを参照、変更する事態が発生してしまいます。 これは誰かが2段ジャンプをしたらJumpCountが0になり、そのプレイヤーが着地しJumpCountがリセットされるまで誰も2段ジャンプができないというバグになります。 これを解決するためにmap型の変数PlayerMapを用意しました。さらにJumpCountは別の独立したdouble_jumpクラス内で定義します。PlayerMapのキーには各プレイヤーの参照を、値としてはdouble_jumpクラスのインスタンスを生成させて追加していきます。具体的な手順としてはプレイヤーがスポーンするプレイヤースポナーの配列をイテレートし、プレイヤーの参照を取得してら順次PlayerMapへ追加していく関数を実行していきます。 これにより、各プレイヤーがそれぞれのJumpCountを参照、変更できるようになるので、マルチプレイで複数のプレイヤーが同時に2段ジャンプor空中ダッシュをしても問題なく動作させることができます。 PCとNintendo Switchを使ってプレイヤーを2人用意してテストしたところ問題なく動作しました。 verseコードの画像もアップ致しましたので是非ご確認ください! 今後はそれぞれのプレイヤーに現在の高さのUI表示と経過時間のUI表示、特定の条件を満たしたらJumpCountが加算される仕組みなどを実装していく予定です。 引き続き島制作を頑張っていきます✨ 最後まで読んでいただきありがとうございました。


