あなたの世界を作りなさい
マルチプレイ
Multiplay Room Message
8分
multiplay room message zepeto multiplayは、クライアントとサーバー(room)間のメッセージ送受信のためのインタフェースを提供します。 サーバーは、個々のクライアントにメッセージを送ったり、全体クライアントにメッセージを送ることができます。 メッセージタイプはprimitive、schema、(custom)objectタイプをサポートします。 server api server apiは次のmethodを提供しています。 api 説明 onmessage(type, callback) zepetoマルチプレイサーバーは、クライアントから送信されたメッセージを処理するために、タイプ別にマッピングされたコールバックを登録できます。 typeパラメータは、文字列または数字として定義できます。 client send(type, message) 特定のクライアントにメッセージを送信するための関数です。 broadcast(type, message) roomに接続中の全てのクライアントにメッセージを送るためのインターフェイスです。 全体クライアントに発信したり、特定のクライアントだけ除いて発信可能です。 multiplay server apiを知りたい場合は、次の記事を参照してください。 📘 次のガイドを参考にして \[ zepeto multiplay(server) api ] メッセージ受信 onmessage使用例は次の通りです。 oncreate() { this onmessage("action", (client sandboxplayer, message string) => { // triggers when 'action' message is sent }); this onmessage(" ", (client sandboxplayer, type, message string) => { // triggers when any other type of message is sent, // excluding "action", which has its own specific handler defined above console log(`${client sessionid} sent ${type} ${message}`); }); } メッセージ送信 client send使用例は次の通りです。 oncreate() { this onmessage("echo", (client sandboxplayer, message string) => { // send messge to sender client send("echo", `echo message ${message}`); }); } broadcast使用例は次の通りです。 すべてのクライアントへのメッセージ発信例 oncreate() { this onmessage("action", (client sandboxplayer, message string) => { // broadcast a message to all clients this broadcast("action taken", "an action has been taken!"); }); } ▼ 特定のクライアントを除いたメッセージ発信例 oncreate() { this onmessage("fire", (client sandboxplayer, message string) => { // sends "fire" event to every client, except the one who triggered it this broadcast("fire", message, { except client }); }); } client api client apiは次のmethodを提供しています。 room addmessagehandler(type, message) サーバーから受信したメッセージを受信するにはaddmessagehandlerコールバックを登録することで受信することができます。 メッセージコールバック登録の際、受信したいメッセージタイプを定義することができます。 room send(type, message) サーバーにメッセージを発信する際に使用するインターフェイスです。伝えるメッセージタイプを定義することができます。 room addmessagehandler使用例は次の通りです。 this multiplay roomjoined += (room room) => { // add server message listener type by "fire" room addmessagehandler("fire", (message string) => { // print server message console log(message); }); }; room send使用例は次の通りです。 room send("message", "hello"); 様々なタイプのroom message例をご確認ください。 server import { sandbox, sandboxoptions, sandboxplayer } from 'zepeto multiplay'; interface messagemodel { str string, istest boolean } export default class extends sandbox { oncreate(options sandboxoptions) { this onmessage("action", (client sandboxplayer, message string) => { // triggers when 'action' message is sent // broadcast a message to all clients this broadcast("action taken", "an action has been taken!"); }); this onmessage(" ", (client sandboxplayer, type, message string) => { // triggers when any other type of message is sent, // excluding "action", which has its own specific handler defined above console log(`${client sessionid} sent ${type} ${message}`); }); this onmessage("echo", (client sandboxplayer, message number) => { // send message to sender client send("echo", `echo message ${message}`); }); this onmessage("fire", (client sandboxplayer, message string) => { // sends "fire" event to every client, except the one who triggered it this broadcast("fire", message, { except client }); }); this onmessage("position", (client sandboxplayer, message) => { console log(`\[${client sessionid}] position (${message x}, ${message y}, ${message z})`); }); // when custom object "messagemodel" type of message is sent this onmessage\<messagemodel>('channel object', (client sandboxplayer, message messagemodel) => { console log(`\[${client sessionid}] message type ${typeof (message)}, message ${message str}`); }); } } client import { room, roomdata } from 'zepeto multiplay'; import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetoworldmultiplay } from 'zepeto world'; interface messagemodel { str string, istest boolean } export default class clientlogic extends zepetoscriptbehaviour { private multiplay zepetoworldmultiplay; start() { this multiplay = this gameobject getcomponent\<zepetoworldmultiplay>(); this multiplay roomjoined += (room room) => { // \[room send] // send "action" message to server room send("action", "action message"); // send "message" message to server room send("message", "hello"); // send "echo" message to server room send("echo", 1234); // send roomdata "posdata" message to server const posdata = new roomdata(); posdata add("x", this transform position x); posdata add("y", this transform position y); posdata add("z", this transform position z); room send("position", posdata getobject()); // send custom object "messagemodel" to server let message = {str 'test', istest true} as messagemodel; room send("channel object", message); // \[room addmessagehandler] // add server message listener type by "echo" room addmessagehandler("echo", (message string) => { // print server message console log(message); }); // add server message listener type by "action taken" room addmessagehandler("action taken", (message string) => { // print server message console log(message); }); // add server message listener type by "fire" room addmessagehandler("fire", (message string) => { // print server message console log(message); }); }; } }