この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新リビジョン 両方とも次のリビジョン | ||
vci:script:reference:message [2021/11/17 21:20] numa 以前のリビジョンを復元 (2021/08/03 17:55) |
vci:script:reference:message [2023/02/13 20:26] santarh [Emit] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== vci.message(VCI間の通信) ====== | + | ~~NOTOC~~ |
+ | ====== ExportMessage(メッセージ通信) ====== | ||
- | VCIから別のVCIへMessageを飛ばしてVCI間の通信に使用する事が出来ます。\\ | + | メッセージと呼ばれるデータを指定の名前に紐づけて、ローカルの他のVCIや、他のクライアントのVCIとも通信することができます。 |
- | この機能により、VCIからVCIに対して操作する事が可能となります。\\ | + | |
- | 共有変数とは扱いが異なります。\\ | + | |
- | [[vci/script/reference/message | vci.message]] で送信出来る文字量は UTF-8 換算で ''4000 byte'' までとなります。 | + | 想定用途は2種類あります。\\ |
+ | ひとつは [[#EmitWithId]] で **自分自身のVCIのネットワーク同期のため** です。\\ | ||
+ | もうひとつは [[#Emit]] で **空間内の異なるVCIへのイベントの発出のため** です。\\ | ||
- | [[vci:updatelog:1.5.4a|バーチャルキャスト1.5.4aのVCI更新]] | + | 具体的な活用例としては以下が挙げられます。\\ |
+ | [[#EmitWithId]] を使えば色の変化などのVCIの状態変化をネットワーク同期できます。\\ | ||
+ | [[#Emit]] を使えばリモコンなど他のVCIを操作したり、文字表示VCIに表示する文字を伝えることができます。 | ||
- | * メッセージはメッセージ送信時に居たプレイヤー間でしか処理されません。 | + | 制限としては、送信出来るデータ量は約 ''4000 byte'' です。 |
- | * (あとから入室してもsetで情報を共有できる共有変数とは異なります) | + | |
- | * 今後のアップデートでシステムからのメッセージを受け取る事を予定しています。 | + | |
- | ===== 関数一覧 ===== | + | またネットワーク同期を行う機能として他に[[vci/script/reference/syncvariable|同期変数]]があります。 |
- | ^ 名前 ^ 説明 ^ 対応バージョン ^ | + | ^ 名前 ^ 説明 ^ バージョン ^ |
- | | Emit(messageName, value) | メッセージを送信します。メッセージは、自分自身を含む全ユーザーの全VCIに送信されます。| | + | | [[vci/script/reference/message#Emit]] | メッセージを全体に送信| | |
- | | EmitWithId(messageName, value, targetId) | 特定のVciIdを指定することで、指定のVCIに対してメッセージを送信することが出来ます | v2.0.0b以降 | | + | | [[vci/script/reference/message#EmitWithId]] | IDを指定してメッセージを送信 | 2.0.0b以降 | |
- | | On(messageName, callback) | メッセージを受信します。 | | + | | [[vci/script/reference/message#On]] | メッセージを受信 | | |
- | ==== Emit(messageName, value) ==== | + | ===== Emit ===== |
+ | **Emit fun(messageName: string, value: usertype)** | ||
- | * メッセージを送信します。 | + | * 空間(スタジオ・ルーム)にあるすべてのVCIに対してメッセージを送信します。 |
- | * メッセージは、自分自身を含む全ユーザーの全VCIに送信されます。 | + | * ローカルのみならず、他のクライアントにもメッセージを送信します。 |
+ | * 異なるVCIに対する通信など、空間全体にメッセージを発する必要がある時に使用します。\\ **用途に合致しない限り使用を避けてください**。 | ||
+ | * 受信側は誰からのメッセージなのか区別することができないため、**他のVCIを誤動作させる**可能性があります。**メッセージ名にありふれた名前を使わないでください**。 | ||
+ | * 空間全体にメッセージを発するため、ネットワーク負荷が非常に重いです。\\ updateイベントなど**高頻度で呼ばないでください**。 | ||
- | ==== EmitWithId(messageName, value, targetId) ==== | + | <file lua sample.lua> |
+ | function onUse(objectName) | ||
+ | vci.message.Emit("my_special_vci_protocol_display_text", "こんにちは") | ||
+ | end | ||
+ | </file> | ||
+ | ===== EmitWithId ===== | ||
+ | **EmitWithId fun(messageName: string, value: usertype, targetId: string)** | ||
- | * 特定のVciIdを指定してメッセージを送信します。 | + | * 特定のVCIに対してメッセージを送信します。 |
+ | * ローカルのみならず、他のクライアントにもメッセージを送信します。 | ||
+ | * 同じVCIを複数出したときも、自分自身のVCIにのみメッセージを届けることができます。 | ||
- | ==== On(messageName, callback) ==== | ||
+ | <file lua sample.lua> | ||
+ | function onUse(objectName) | ||
+ | -- 自分自身のVCIに対してメッセージを送信 | ||
+ | vci.message.EmitWithId("color", 3, vci.assets.GetInstanceId()) | ||
+ | end | ||
+ | </file> | ||
+ | ===== On ===== | ||
+ | **On fun(messageName: string, callback: usertype)** | ||
* メッセージを受信します。 | * メッセージを受信します。 | ||
* メッセージを送信したのと同じVCIでも、別のVCIでもOK。 | * メッセージを送信したのと同じVCIでも、別のVCIでもOK。 | ||
ライン 37: | ライン 57: | ||
* **Onは第2引数で指定した関数よりも後に定義してください。受信関数よりも前に定義するとエラーとなります。** | * **Onは第2引数で指定した関数よりも後に定義してください。受信関数よりも前に定義するとエラーとなります。** | ||
- | === callback(sender, name, message) === | + | === 引数 === |
以下、3つの引数をとります。senderはシステムによって設定される送信者情報のtableです。 | 以下、3つの引数をとります。senderはシステムによって設定される送信者情報のtableです。 | ||
ライン 48: | ライン 68: | ||
| message | メッセージの内容。Emit 関数の第2引数です。| | | message | メッセージの内容。Emit 関数の第2引数です。| | ||
- | ===== 具体例 ===== | + | ==== サンプル ==== |
**送信側** | **送信側** | ||
ライン 109: | ライン 129: | ||
3.Jump()の引数の内容がメッセージの内容なので、\\ | 3.Jump()の引数の内容がメッセージの内容なので、\\ | ||
送信するメッセージの内容を変化させることで、受信側の挙動を変えることができます。 | 送信するメッセージの内容を変化させることで、受信側の挙動を変えることができます。 | ||
+ | |||
+ | ===== 解説 ===== | ||
+ | |||
+ | * [[vci/script/reference/messagecomment]] | ||
+ | * [[vci/script/reference/messagenotification]] | ||
===== サンプル ===== | ===== サンプル ===== | ||
- | [[vci:sample:message:no2|複数のVCI間で変数をやり取りする]] | + | * [[vci:sample:message:no2|複数のVCI間で変数をやり取りする]] |