あなたの世界を作りなさい
マルチプレイ
12分
zepetoマルチプレイは、複数のユーザーが同時にワールドに接続してプレイできるモジュールです。 サーバー/クライアントの開発とローカルテスト環境を提供します。 📘 公式マルチプレイワールドサンプル github https //github com/naverz/zepeto multiplay example https //github com/naverz/zepeto multiplay example チュートリアル マルチプレイを作る docid\ zp83r5fc6n0bi1i84p4k3 ステップ 1 インストール \[プロジェクト]パネルの左上の\[+]メニューからzepeto → マルチプレイサーバーを選択するか、assets → create → zepeto → マルチプレイサーバーに移動します。 world multiplayパッケージは以下のアイテムで構成されており、ワールドが公開されると自動的に更新されます。 index ts サーバーのメインロジックコード schemas サーバー/クライアント通信のデータ構造 ❗️ 注意 ゲームごとに1つのworld multiplayパッケージしか作成できません。 ステップ 2 設定 下の画像に示されているように、\[ワールド設定を開く]をクリックしてワールド設定を行います。 プロパティ 説明 バージョン 登録するファイルのバージョンを入力してください。 最大クライアント数 部屋にアクセスできる最大人数を設定します。 オリエンテーション 画面の向きを選択します。 招待を無効にする 部屋の招待機能を無効にします。 部屋リストを無効にする 部屋リストを確認する機能を無効にします。 プライベートルームを無効にする プライベートルームを作成する機能を無効にします。 👍 招待を無効にする 部屋の招待機能がオフでも、テストリンクを通じて招待を送信できます。 ステップ 3 テストサーバーの実行 zepeto multiplayは、クリエイターが開発中にサーバー/クライアントをテストできるローカルサーバー環境を提供します。 ローカルサーバーのアクションを確認するには、unityのトップメニューから → ウィンドウ → zepeto → マルチプレイサーバーを選択して、サーバーステータスウィンドウを開きます。 エディターの画面中央にある\[▶︎(再生)]ボタンの隣にあるサーバーボタンをクリックします。 サーバーステータスペインで次のサーバーログが表示されます。 ステップ 4 クライアントへの接続(ローカルサーバーへの接続) zepetoworldmultiplayコンポーネントは、クライアント側で使用されるマルチプレイマネージャークラスです。 hierarchyウィンドウにgameobjectを作成し、zepetoworldmultiplayコンポーネントを追加します。 zepetoworldmultiplayコンポーネントは、自動的にマルチプレイパッケージに接続します。 エディタ画面の中央にある\[▶︎(再生)]ボタンをクリックして、サーバーログウィンドウでクライアント接続ログを表示します。 開発サーバーはlocalhost(127 0 0 1)で実行され、ポートはプロジェクトが最初に読み込まれるときに設定されます。 マルチプロジェクトを通じて接続する場合、接続環境を以下のように設定してください。 📘 以下のガイドを参照してください マルチプレイipアドレスへのアクセス docid\ lrxdlhurljlue 9cb2nzl 👍 ワールドが配信された後、zepetoサーバーで実行されます。 ステップ 5 サーバー / クライアント通信のデフォルト例 サーバーロジックの実装 world multiplayパッケージ内のindex tsファイルは、サーバーの主要なロジックを担当するコードです。 index tsファイルを開き、oncreate()イベントでメッセージタイプechoを受信した後にクライアントに配信されるロジックを追加します。 📘 以下のガイドを参照してください \[zepeto multiplay(server) api] import { sandbox, sandboxoptions, sandboxplayer } from 'zepeto multiplay'; import { player } from 'zepeto multiplay schema'; export default class extends sandbox { oncreate(options sandboxoptions) { this onmessage("echo", (client, message) => { console log(`echo onmessage from ${client sessionid}, > ${message}`); // 現在のクライアントに送信 client send("echo", "送信者へのエコー " + message); // すべての接続されたクライアントにブロードキャスト this broadcast("echo", "全員へのエコー " + message); }); } onjoin(client sandboxplayer) { const player = new player(); player sessionid = client sessionid; player userid = client userid; const players = this state players; players set(client sessionid, player); console log('onjoin!!!!'); } onleave(client sandboxplayer, consented? boolean) { } } クライアントロジックの実装 zepetoworldmultiplay gameobjectにzepetoスクリプトを追加して、サーバーイベントを送受信するために次のようにします multiplaysample ts import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetoworldmultiplay } from 'zepeto world'; import { room } from 'zepeto multiplay'; export default class multiplaysample extends zepetoscriptbehaviour { private multiplay zepetoworldmultiplay; start() { this multiplay = this gameobject getcomponent\<zepetoworldmultiplay>(); this multiplay roomjoined += (room room) => { console log(`roomcreated, my session id is ${room sessionid}`); // サーバーにメッセージを送信 room send("echo", "こんにちは zepeto multiplay"); // サーバーメッセージリスナーを追加 room addmessagehandler("echo", (message) => { // サーバーメッセージを表示 console log(message); }); }; } } 📘 次のガイドを参照してください \[err] docid 4gcgobpudcjthxxzbuw5w ステップ 6 出力結果のテスト エディタ画面の中央にある\[▶︎(再生)]をクリックして、サーバー/クライアントを実行します。以下に示すように、'echo'タイプのメッセージの例が表示されるはずです ① サーバーでクライアントメッセージを受信したときの出力ログ。 ② クライアントからサーバーに受信したメッセージのログ。 サーバーコード使用時の注意事項 ❗️ 注意 \[サーバーコード内の変数の使用] 変数はサーバーコード内でも宣言できます。 ただし、サーバーで利用可能なキャッシュメモリは現在512kbに制限されています。(これは後で変更される可能性があります。) 512kbを超えると、部屋が隠れる可能性があるため、これを考慮して開発してください。 \[サーバーコード内のループの使用] ループの時間制限はサーバーコードで2秒(2000ms)に設定されています。 ブロッキングコードや長時間実行されるループを使用すると、ループの時間制限によりプログラムが正しく実行されない可能性があるため、開発時に考慮してください。