メッセージ#
「メッセージ」は VCI のネットワーク同期手段のひとつです。
この機能はExportMessage
によって提供されます。
メッセージの使用用途は 2 通りあります。
- 自分自身の VCI インスタンスのネットワーク同期
EmitWithId
/EmitToSelf
効果音を鳴らしたりアニメーションを再生したりといったイベント伝達をネットワーク同期できます。
- 空間内の異なるVCIへのイベントの送信
Emit
リモコンとして他の VCI インスタンスを操作したり、文字表示 VCI に表示する文字を伝えることができます。
メッセージは、名前と値のペアで構成されます。
名前はユーザが自由に指定することができる string
です。
値は number
や table
などユーザが自由に指定できる Lua オブジェクトです。
メッセージは送信できる容量が約 4000 byte
に制限されています。
またネットワーク同期を行う機能として他に アイテム内同期変数 があります。
Example#
自分自身の VCI インスタンスのネットワーク同期#
ひとりのプレイヤーが Use したときに、すべてのプレイヤーのクライアントで効果音を鳴らす例です。
Use したプレイヤーは効果音のインデックスをランダムに選び、メッセージで送信します。 送信したプレイヤーを含むすべてのプレイヤーはメッセージを受信し、インデックスに基づいて効果音を鳴らします。
--- 鳴らす効果音のリストを取得します。
--- "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)