このページは過去の情報となります。
新しいスクリプトリファレンスはこちらになります。
メッセージと呼ばれるデータを指定の名前に紐づけて、ローカルの他のVCIや、他のクライアントのVCIとも通信することができます。
想定用途は2種類あります。
ひとつは EmitWithId で 自分自身のVCIのネットワーク同期のため です。
もうひとつは Emit で 空間内の異なるVCIへのイベントの発出のため です。
具体的な活用例としては以下が挙げられます。
EmitWithId を使えば色の変化などのVCIの状態変化をネットワーク同期できます。
Emit を使えばリモコンなど他のVCIを操作したり、文字表示VCIに表示する文字を伝えることができます。
制限としては、送信出来るデータ量は約 4000 byte
です。
またネットワーク同期を行う機能として他に同期変数があります。
名前 | 説明 | バージョン |
---|---|---|
Emit | メッセージを全体に送信 | |
EmitWithId | IDを指定してメッセージを送信 | 2.0.0b以降 |
On | メッセージを受信 |
Emit fun(messageName: string, value: usertype)
function onUse(objectName) vci.message.Emit("my_special_vci_protocol_display_text", "こんにちは") end
EmitWithId fun(messageName: string, value: usertype, targetId: string)
function onUse(objectName) -- 自分自身のVCIに対してメッセージを送信 vci.message.EmitWithId("color", 3, vci.assets.GetInstanceId()) end
On fun(messageName: string, callback: usertype)
以下、3つの引数をとります。senderはシステムによって設定される送信者情報のtableです。
引数 | 内容 |
---|---|
sender.type | vci という文字列。 |
sender.name | 送信元のVCIのTitle。 |
sender.commentSource | 空文字列。 |
name | メッセージの名前。Emit 関数の第1引数です。 |
message | メッセージの内容。Emit 関数の第2引数です。 |
送信側
function onUse(self) -- 第1引数にメッセージの種類 第2引数にメッセージの内容 -- 今回は受信側のSubItemをジャンプさせるメッセージとその強さを指定 vci.message.Emit("message_jump",3000) end
受信側
local receiver = vci.assets.GetTransform("Cube") -- sender: 送信者情報(システムが設定します) -- name: メッセージの名前。Emit 関数の第1引数です。 -- message: メッセージの内容。Emit 関数の第2引数です。 function Jump(sender, name, message) for k, v in pairs(sender) do print(k .. ":" .. v) end -- nameにメッセージの種類 messageにメッセージの内容が入ってます print(name) print(message) --messageに入っているジャンプの強さでSubItemを飛ばします receiver.AddForce(message*receiver.GetUp()) end --シーンでメッセージ名が"message_jump"のvci.message.Emitが実行されたときにJump関数が呼び出される vci.message.On("message_jump", Jump)
EmitWithIdで特定のVCIに対して送信する
function GetMessage(sender, name, message) print(message.abc) end vci.message.On("123", GetMessage) function update() -- vci.assets.GetInstanceIdを指定して自分自身にだけ送信する vci.message.EmitWithId("123", { abc = "ハロー" }, vci.assets.GetInstanceId()) end
送信側がやっている事
基本的に送りたいメッセージをEmit()を実行して送るだけです。
ただし、受信側とどのようなメッセージをやり取りするかは事前に決めておく必要があります。
受信側がやっている事
1.vci.message.On() で受信したいメッセージの種類を登録します。
Emit()でメッセージが送信された時にOn()で登録されたメッセージを読み込むことができます。
2.この例では、送られてきたメッセージはJump()に渡されます。
メッセージの内容がJump()の引数として与えられます。
3.Jump()の引数の内容がメッセージの内容なので、
送信するメッセージの内容を変化させることで、受信側の挙動を変えることができます。