アイテム内同期変数#

「アイテム内同期変数」は VCI のネットワーク同期手段のひとつです。
特定のVCIインスタンスに紐づく変数をネットワーク同期できます。
それぞれの変数は変数名と値のペアで、変数名にはstringを、値にはnil|boolean|number|string|tableを指定できます。
アイテム内同期変数を制御するAPIはExportStateクラスによって提供されます。
変数はExportState.Set()で設定し、ExportState.Get()で取得します。

仕様#

  • 変数はすべてのプレイヤーに同期されます

  • 変数の初期値はnilです

  • 1つのVCIインスタンスに割り当てられたアイテム内同期変数の総容量は16KiBです

    • 変数名と値をUTF-8でエンコードした際のバイト数の合計が1つの変数のサイズとなります

    • 使用中の変数の値にnilSetすると変数が削除され、容量が解放されます

  • 空間の種類によって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