バーチャルキャスト公式Wiki
メニュー
Steam版
デバイス
アセット
配信
その他
リリース情報
- wiki編集者用ページ
-
以前のリビジョンの文書です
グローバル同期変数1) 。特定のアイテムに結び付かずに、部屋に変数を保存する機能です。
if vci.assets.IsMine then -- 呼び出したユーザーが代表して初期化する vci.studio.shared.Set('switch', 0) end function onUse(use) print('use') vci.studio.shared.Set('switch', 1) end function onUnuse(use) print('unuse') vci.studio.shared.Set('switch', 0) end
Bind は updateAll と似ていますが、ちょっと違います。
-- Bind。値が変更されたタイミングだけ呼ばれる vci.studio.shared.Bind('switch', function(value) if value==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)
-- Bind。値が変更されなくても毎フレーム呼ばれる function updateAll() -- 所有権に関係なく全ユーザーに来る --print(vci.state.Get('switch')) if vci.studio.shared.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
初期に updateAll が無かったために実装されました。
ExportState.Add項を参照してください。
グローバル同期変数には実装上の弱点があります。
local value = vci.studio.shared.Get('valueName')
-- あらかじめ値を受け取る関数を用意して message.On('response_valueName', function() end) -- 値を要求 message.Emit('request_valueName')
-- 値が要求されたら message.On('request_valueName', function() -- アイテム内同期変数から値を得て投げ返す vci.Emit('respone_valueName', vci.state.Get('valueName')) end)
ちょっと大変です。