TIPS:P2Pによるオンラインマルチプレイ機能を実装する

2024年3月21日木曜日

Features GDevelop TIPS

X f B! P L

はじめに

P2Pとは「Peer to Peer」の略です。
P2Pを使用すると複数人同時のマルチプレイが可能になります。
P2Pはサーバを介した通信ではなく、クライアント同士で直接データのやり取りを行います。
そのために、実行中のゲーム(クライアント)からブローカーサーバに接続します。
一度ブローカーサーバに接続したクライアントは固有のIDを取得できます。
ブローカーサーバに接続したほかのクライアントのIDへ接続することで、イベントを送受信できるようになります。

1.オブジェクトを用意する

ほかのクライアントに接続するためのシーンで使うオブジェクトを用意します。
必要なオブジェクトはテキストオブジェクトとテキスト入力(テキストフィールド)です。
今回は必要最低限のものだけを用意します。

まずはテキストフィールドです。


  1. 自身のクライアントIDを表示するテキストフィールド
  2. 接続先のクライアントIDを入力するテキストフィールド
  3. 接続試行をするためのボタンとなるオブジェクト
これらを用意したらシーンに配置します。

2.ブローカーサーバへの接続

オブジェクトを作成して配置したらイベントエディタに移ります。
ほかのクライアントに接続するためのシーンでイベントを作成します。
条件: シーンが始まった 
アクション: デフォルトブローカーサーバーと接続する 

このイベントにより、ブローカーサーバへ接続します。

サーバに接続したら自身のクライアントIDを取得できるようになりますので表示します。
条件: P2Pは準備はできた? 
アクション: MyID のテキストを変更する:P2P::GetID() を代入 
 P2P::GetID() は接続済みの自身クライアントIDを取得するための式です。

相手のクライアントIDを入力するためのテキストフィールドに、接続先IDを入力したら、そちらへ接続を試みます。
次はそのイベントを作成します。

IDを入力するテキストフィールドオブジェクト名は「ConnectID」だとします。
そして、接続試行開始するためのボタンのオブジェクト名は「Join」だとします。

条件: Button Join is released 
アクション: P2Pクライアント ConnectID.Text() と接続する

 ConnectID.Text() はConnectIDという名前のテキストフィールドに入力された接続先IDとなります


次に相手のピアと接続開始したあとにシーンを変更するイベントを作成します。

相手のクライアントと接続が開始したらシーンを移るんですが、イベントをトリガーしないと自身のクライアントだけシーンを移り、相手のクライアントはそのままの状態になります。
ですので、接続が開始したタイミングでトリガーを送ります。

条件: P2P ピアとの接続を開始した 
アクション: すべての接続先クライアントに "Join" をトリガーする(追加データ:"" 
アクション: シーン "PlayScene" に変更する  
 

相手のクライアントがトリガーを受け取ったら、シーンを変更します。

条件: 他のクライアントからイベント "join" を受信した(データロス:いいえ
アクション: シーン "PlayScene" に変更する 


これで準備が整いました。

3.ほかのクライアントと接続する

プレビューウィンドウをふたつ開いて、ふたつのクライアントを接続してみましょう。

ウィンドウを開いたら一方のIDをコピーし、もう一方のクライアントの空欄になっているテキストフィールドにペーストします。

これで接続が完了したら、両方のクライアントは接続を維持しながらシーンを変更します。
次は、移動先のゲームシーンを作成していきます。

4.アクションをトリガーする

今回はプラットフォーマーアクションゲームでマルチプレイのテストをしてみましょう。
まず、通常のシングルプレイ用のプラットフォーマーゲームを作成してください。

その後に、自身のクライアントで起こった変更を相手のクライアントに反映するために、イベントをトリガーするだけです。

例えば、プレイヤーAが前進したとします。
その時アクションで"move on"というトリガーを送信します。
相手のクライアントは"move on"を受信したら、自身のクライアントにいるプレイヤーAをアクションで前進させます。

双方のクライアントで反映させたいイベントはすべてトリガーで送信します。
逆に、自身のクライアントのみで反映させたいイベントはトリガーする必要はありません。
(相手に見えては不都合なものなどは自身のクライアントのみで表示させます。)

5.オンラインデモ

デモをプレイする場合は2台のスマホ、デスクトップの場合はふたつのブラウザ、あるいはブラウザのふたつのタブで、ゲームをふたつ開らかないと検証できません。

PCの場合はそのままクライアントIDをコピペで貼り付けます。
モバイルの場合は画面の左側に「シンプルQRコードメーカー」が表示されます。
生成したQRコードをもう一方の端末で読み込むことでクライアントIDを簡単に共有できます。


こちらのゲームは協力プレイが必要で、一人ではクリアできない設計となっています。
一人でプレイする場合は、両方のプレイヤーを交互に操作するなど工夫してみてください。


オンラインデモはこちらからどうぞ
こちらのQRコードからでもプレイできます。

6.プロジェクトファイル

上記オンラインデモで使用したプロジェクトファイルを配布します。

おわりに

P2Pは手軽で便利ですが、チート行為の検出が難しいなどいくつか難点がありますので、不特定多数との接続で使用するのではなく、友人同士などIDを共有できる間柄でのみ接続することを推奨します。

最後までお読みいただきありがとうございました😆
もしよろしければ下記のボタンから応援よろしくお願いします🙇



こちらの記事はいかがでしたか?
ぜひご評価をおねがいします🙏

プロフィール


My name is Cratier.
I'm an indie game developer.


Read more...

このブログを検索

Translate

UPDATE

最新コメント

人気の投稿

アーカイブ

リンク元ランキング

カテゴリー

アンケート



Q.クレイティアのGD覚書でお気に入りのコンテンツはどれですか?

チュートリアル
TIPS
RTA Develop
雑記
That's談
その他


Q.あなたのGDvelop使用歴はどれくらいですか?

1ヶ月未満
半年未満
1年未満
1年以上
2年以上
3年以上
4年以上
5年以上

オープンチャット

LINEアカウント

ご連絡フォーム、またはLINEから お問い合わせ、ご要望、ご指摘など、お気軽にご連絡くださいませ。

ご連絡

名前

メール *

メッセージ *

💗雑談CHAT💗
お気軽にお話しください🐹
同時接続人数:

もしよろしければ下記のボタンから応援よろしくお願いします🙇




QooQ