アイテム内同期変数#
「アイテム内同期変数」は VCI のネットワーク同期手段のひとつです。
特定のVCIインスタンスに紐づく変数をネットワーク同期できます。
それぞれの変数は変数名と値のペアで、変数名にはstring
を、値にはnil|boolean|number|string|table
を指定できます。
アイテム内同期変数を制御するAPIはExportState
クラスによって提供されます。
変数はExportState.Set()
で設定し、ExportState.Get()
で取得します。
仕様#
変数はすべてのプレイヤーに同期されます
変数の初期値は
nil
です1つのVCIインスタンスに割り当てられたアイテム内同期変数の総容量は16KiBです
変数名と値をUTF-8でエンコードした際のバイト数の合計が1つの変数のサイズとなります
使用中の変数の値に
nil
をSet
すると変数が削除され、容量が解放されます
空間の種類によってVCIが出された空間から全員退出した際の挙動が異なります
空間の種類
全員退出した際の挙動
ルーム
変数が保持される
スタジオ
変数が初期化される
ネットワーク通信は
ExportState.Set()
の呼び出し時に発生しますExportState.Get()
はローカルキャッシュを返すので、ネットワーク通信は発生しません
Example#
Useされた回数をアイテム内同期変数に保存するスクリプトの例です。
-- アイテム内同期変数 "var1" に値が設定されていない場合、初期化
if vci.assets.IsMine then
if vci.state.Get("var1") == nil then
vci.state.Set("var1", 0)
end
end
-- アイテム内同期変数 "var1" のローカルキャッシュ
local localVar1
-- 値が変化したらコンソールに表示する
function updateAll()
local syncedVar1 = vci.state.Get("var1")
if localVar1 ~= syncedVar1 then
print("var1: " ..tostring(syncedVar1))
localVar1 = syncedVar1
end
end
-- Useするとアイテム内同期変数 "var1" の値を1増やす
function onUse(usedSubItemName)
vci.state.Set("var1", localVar1 + 1)
end