メッセージ#

「メッセージ」は VCI のネットワーク同期手段のひとつです。 この機能はExportMessageによって提供されます。

メッセージの使用用途は 2 通りあります。

自分自身の VCI インスタンスのネットワーク同期 EmitWithId / EmitToSelf

効果音を鳴らしたりアニメーションを再生したりといったイベント伝達をネットワーク同期できます。

空間内の異なるVCIへのイベントの送信 Emit

リモコンとして他の VCI インスタンスを操作したり、文字表示 VCI に表示する文字を伝えることができます。

メッセージは、名前と値のペアで構成されます。 名前はユーザが自由に指定することができる string です。 値は numbertable などユーザが自由に指定できる Lua オブジェクトです。

メッセージは送信できる容量が約 4000 byte に制限されています。

またネットワーク同期を行う機能として他に アイテム内同期変数 があります。

Example#

自分自身の VCI インスタンスのネットワーク同期#

ひとりのプレイヤーが Use したときに、すべてのプレイヤーのクライアントで効果音を鳴らす例です。

Use したプレイヤーは効果音のインデックスをランダムに選び、メッセージで送信します。 送信したプレイヤーを含むすべてのプレイヤーはメッセージを受信し、インデックスに基づいて効果音を鳴らします。

main.lua#
--- 鳴らす効果音のリストを取得します。
--- "Sounds" には3つの AudioSource がアタッチされています。
local sounds = vci.assets.GetTransform("Sounds").GetAudioSources()

--- メッセージの名前を定義します。
local message_name = "PlaySound"

--- 送信者は、鳴らす効果音のインデックスをランダムに選び、メッセージで送信します。
function onUse(objectName)
    local sound_index = math.random(1, #sounds)
    vci.message.EmitWithId(message_name, sound_index, vci.assets.GetInstanceId())
    -- vci.message.EmitToSelf(message_name, sound_index) とも書けます。
    print("メッセージを送信しました。"..tostring(sound_index))
end

--- 受信者は、受信したインデックスを基に効果音を鳴らします。
function OnReceivePlaySound(sender, name, message)
    local sound_index = message
    sounds[sound_index].Play(1, false)
    print("メッセージを受信しました。"..tostring(sound_index))
end

--- 受信関数を登録します。
vci.message.On(message_name, OnReceivePlaySound)