このページは過去の情報となります。
新しいスクリプトリファレンスはこちらになります。
アイテム内同期変数1) 。特定のアイテムに紐づく変数を持たせる機能です。
vci.state で共有出来るデータ量は最大16KB
までとなります。
名前 | 説明 | バージョン |
---|---|---|
Set | Stateに値を設定 | |
Get | Stateの値を取得 | |
Add(非推奨) | Stateに値を加算 | |
GetHashCode | ハッシュ値を取得 | |
ToString | 文字列に変換 |
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 fun(name: string, value: usertype):
値をセットすることを要求します。(Setできるまでラグがあります)
セットできる型は下記になります
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
Get fun(name: string): usertype
local value = vci.state.Get('value' )
Add fun(name: string, value: usertype):
複数ユーザーが同時に値を変更する場、Getした値に加算した値 をセットするとうまくいかない場合があります。
vci.state.Set('value', vci.state.Get() + 1) -- Getした値に加算する
上記のスクリプトを2人以上のユーザーが同時に実行した場合にひとつしか値が増えません。 (最後のひとつで上書きされて、他の値が打ち消されてしまう) Addを使うことでこの状況に対応できます。
vci.state.Add('value', 1) -- 値を加算する命令
上記のスクリプトを2人以上のユーザーが同時に実行した場合に実行回数分加算できます。
GetHashCode fun(): number
ハッシュ値を求めます。
ToString fun(): string
文字列に変換します。