创造你的世界
多人游戏
Multiplay Room Message
8 分
multiplay room message zepeto multiplay提供客户端、 服务器(room)之间的信息传送 /接收接口。 服务器可以给每个客户端发送信息或给全部客户端发送信息。 支持primitive, schema, (custom)object形式的消息传达类型。 server api server api提供如下所示的method。 api 描述 onmessage(type, callback) zepeto multiplay 服务器可以记录处理客户端发送的信息类型的回调函数。 信息类型可以用字符串或数字定义。 client send(type, message) 为了给指定的客户端发送信息的函数。 broadcast(type, message) 是给连接room的全部客户端发送信息的插口 可以给全部客户端发送信息或给除指定客户端以外的客户端发送。 如果您想了解zepeto multiplay server api,请参考以下文档。 📘 请参考以下指南 \[ zepeto multiplay(server) api https //developer zepeto me/docs/multiplay server/ ] 接收信息 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); }); }; } }