この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
vci:script:reference:message [2021/11/17 21:40] numa |
vci:script:reference:message [2024/08/19 12:40] (現在) pastatto [解説] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== vci.message(VCI間の通信) ====== | + | ~~NOTOC~~ |
+ | ====== ExportMessage(メッセージ通信) ====== | ||
+ | <WRAP center round important 80%> | ||
- | VCIから別のVCIへMessageを飛ばしてVCI間の通信に使用する事が出来ます。\\ | + | このページは過去の情報となります。\\ |
- | この機能により、VCIからVCIに対して操作する事が可能となります。\\ | + | 新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。 |
- | 似たような機能として[[vci/script/reference/exportshared|グローバル同期変数]]があります。メッセージとグローバル同期変数の使い分けについては[[vci/updatelog/1.5.4a#機能について|こちら]]を参照してください。\\ | + | </WRAP> |
+ | メッセージと呼ばれるデータを指定の名前に紐づけて、ローカルの他のVCIや、他のクライアントのVCIとも通信することができます。 | ||
+ | 想定用途は2種類あります。\\ | ||
+ | ひとつは [[#EmitWithId]] で **自分自身のVCIのネットワーク同期のため** です。\\ | ||
+ | もうひとつは [[#Emit]] で **空間内の異なるVCIへのイベントの発出のため** です。\\ | ||
+ | 具体的な活用例としては以下が挙げられます。\\ | ||
+ | [[#EmitWithId]] を使えば色の変化などのVCIの状態変化をネットワーク同期できます。\\ | ||
+ | [[#Emit]] を使えばリモコンなど他のVCIを操作したり、文字表示VCIに表示する文字を伝えることができます。 | ||
- | [[vci/script/reference/message | vci.message]] で送信出来る文字量は UTF-8 換算で ''4000 byte'' までとなります。 | + | 制限としては、送信出来るデータ量は約 ''4000 byte'' です。 |
- | ===== 関数一覧 ===== | + | またネットワーク同期を行う機能として他に[[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。 | ||
ライン 33: | ライン 61: | ||
* **Onは第2引数で指定した関数よりも後に定義してください。受信関数よりも前に定義するとエラーとなります。** | * **Onは第2引数で指定した関数よりも後に定義してください。受信関数よりも前に定義するとエラーとなります。** | ||
- | === callback(sender, name, message) === | + | === 引数 === |
以下、3つの引数をとります。senderはシステムによって設定される送信者情報のtableです。 | 以下、3つの引数をとります。senderはシステムによって設定される送信者情報のtableです。 | ||
ライン 44: | ライン 72: | ||
| message | メッセージの内容。Emit 関数の第2引数です。| | | message | メッセージの内容。Emit 関数の第2引数です。| | ||
- | ===== 具体例 ===== | + | ==== サンプル ==== |
**送信側** | **送信側** | ||
ライン 105: | ライン 133: | ||
3.Jump()の引数の内容がメッセージの内容なので、\\ | 3.Jump()の引数の内容がメッセージの内容なので、\\ | ||
送信するメッセージの内容を変化させることで、受信側の挙動を変えることができます。 | 送信するメッセージの内容を変化させることで、受信側の挙動を変えることができます。 | ||
+ | |||
+ | ===== 解説 ===== | ||
+ | |||
+ | * [[vci/script/reference/messagecomment]] | ||
===== サンプル ===== | ===== サンプル ===== | ||
- | [[vci:sample:message:no2|複数のVCI間で変数をやり取りする]] | + | * [[vci:sample:message:no2|複数のVCI間で変数をやり取りする]] |