バーチャルキャスト公式Wiki
メニュー
Steam版
デバイス
アセット
配信
その他
リリース情報
- wiki編集者用ページ
-
以前のリビジョンの文書です
アイテム内同期変数1) 。特定のアイテムに紐づく変数を持たせる機能です。
vci.state で共有出来るデータ量は最大16KB
までとなります。
例:
if vci.assets.IsMine then -- 呼び出したユーザーが代表して初期化する vci.state.Set('switch', 0) end function updateAll() -- 所有権に関係なく全ユーザーに来る --print(vci.state.Get('switch')) if vci.state.Get('switch')==1 then vci.assets.SetMaterialColorFromIndex(4, Color.__new(1, 0, 0, 1)) else vci.assets.SetMaterialColorFromIndex(4, Color.__new(0.5, 0.5, 0.5, 1)) end end function onUse(use) print('use') vci.state.Set('switch', 1) end function onUnuse(use) print('unuse') vci.state.Set('switch', 0) end
値をセットすることを要求します。(Setできるまでラグがあります)
セットできる型は number型 と string型 です。
Tableはまだ未対応なので、複数のデータを1つの変数に格納する場合はパースする必要があります。
(パース:複数のデータをまとめて保存し、取り出した後に個別のデータに変換する処理)
vci.state.Set(“value”, 1)
を実行したフレームは、あくまでサーバーに送信する予約のようなもので、
実際に反映されるには少なくとも、Setを実行したフレームを終了する必要があります。
グローバル同期変数はサーバー側に保存されるため、通信のラグを見越した処理が必要です。
例:
vci.state.Set('value', 1) -- 値のセットを要求(まだ反映されていない)。 -- delay local delay = 0 while delay < 1000 do delay = delay + 1 end local value = vci.state.Get("value") -- delayしてもSetしたフレームは終了してないのでnil print(tostring(value)) function update() local value = vci.state.Get("value") -- updateの1フレーム目はnil end function onUse(use) local value = vci.state.Get("value") -- VCI取り出し後、時間が経過している場合は1がGetできる print(tostring(value)) end
local value = vci.state.Get('value' )
応用編になります。 複数ユーザーが同時に値を変更する場合向けです。
複数のユーザーが同時に、Getした値に加算した値 をセットした場合にうまくいかない場合があります。
例:
vci.state.Set('value', vci.state.Get() + 1) -- Getした値に加算する
上記のスクリプトを2人以上のユーザーが同時に実行した場合にひとつしか値が増えません。 (最後のひとつで上書きされて、他の値が打ち消されてしまう) Addを使うことでこの状況に対応できます。
vci.state.Add('value', 1) -- 値を加算する命令
上記のスクリプトを2人以上のユーザーが同時に実行した場合に実行回数分加算できます。