Language:

サイドバー

バーチャルキャスト公式Wiki

メニュー

Steam版

デバイス

アセット

配信

その他

リリース情報

デベロッパー向け


開発環境

GLB

vci:script:reference:exportstate

ExportState(アイテム内同期変数)

このページは過去の情報となります。
新しいスクリプトリファレンスはこちらになります。

アイテム内同期変数1) 。特定のアイテムに紐づく変数を持たせる機能です。

vci.state で共有出来るデータ量は最大16KBまでとなります。

  • 変数は全ユーザーで同期されます。
  • 変数はアイテムを呼び出したときには空の状態になります。
    (VCIを消してもう一度出現させた場合、変数は初期化されます)
  • 空間の種類によっては、アイテムが出された空間から全員退出した際に変数がリセットされることがあります。
    • ルームの場合: リセットされない
    • スタジオの場合: リセットされる
名前 説明 バージョン
Set Stateに値を設定
Get Stateの値を取得
Add(非推奨) Stateに値を加算
GetHashCode ハッシュ値を取得
ToString 文字列に変換

サンプル

main.lua
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

Set fun(name: string, value: usertype):

値をセットすることを要求します。(Setできるまでラグがあります)
セットできる型は下記になります

  • nil
  • boolean
  • number
  • string
  • table

Setのラグについて

vci.state.Set(“value”, 1) を実行したフレームは、あくまでサーバーに送信する予約のようなもので、
実際に反映されるには少なくとも、Setを実行したフレームを終了する必要があります。
グローバル同期変数はサーバー側に保存されるため、通信のラグを見越した処理が必要です。

サンプル

main.lua
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

Get fun(name: string): usertype

サンプル

main.lua
local value = vci.state.Get('value' )

Add(非推奨)

Add fun(name: string, value: usertype):

サンプル

複数ユーザーが同時に値を変更する場、Getした値に加算した値 をセットするとうまくいかない場合があります。

main.lua
vci.state.Set('value', vci.state.Get() + 1) -- Getした値に加算する

上記のスクリプトを2人以上のユーザーが同時に実行した場合にひとつしか値が増えません。 (最後のひとつで上書きされて、他の値が打ち消されてしまう) Addを使うことでこの状況に対応できます。

main.lua
vci.state.Add('value', 1) -- 値を加算する命令

上記のスクリプトを2人以上のユーザーが同時に実行した場合に実行回数分加算できます。

GetHashCode

GetHashCode fun(): number

ハッシュ値を求めます。

ToString

ToString fun(): string

文字列に変換します。

1)
実装当初は「状態変数」と呼ばれておりましたが、命名が見直されて「アイテム内同期変数」となりました。これは「グローバル同期変数」と並ぶ「同期変数」の一つであることを明示するためです。
vci/script/reference/exportstate.txt · 最終更新: 2024/02/04 13:08 by Ramen

ページ用ツール