====== 同期変数サンプル ====== 対応バージョンは、**UniVCI v0.33**以降です。 [[https://developer.virtualcast.jp/vci-docs/api/classes/ExportState/index.html|アイテム内同期変数(ExportState)]]のサンプルです。\\ UniVCIをインポートすると**[VCI-Official-Samples > StateApiSample]**内に当サンプルも追加されます。 2つのボタンのうち、どちらを押したかがルームを退室しても保存されるVCIです。 === サンプルデータ === https://virtualcast.jp/products/38dc60c7a6836d6b581ccd17de5ce78959acc7700c7da1a5fe5ba520cfaa5b12 {{ :vci:sample:stateapi:stateapisample.zip |}} ===== コンポーネント設定 ===== VCI Object {{:vci:sample:stateapi:statesample1.png?direct|}} --> Sub Item 設定一覧 (クリックで展開) # VCI Sub Item : Board\\ {{:vci:sample:stateapi:statesample2.png?direct|}} VCI Sub Item : Button1\\ {{:vci:sample:stateapi:statesample3.png?direct|}} VCI Sub Item : Button2\\ {{:vci:sample:stateapi:statesample4.png?direct|}} <-- ===== VCIスクリプト ===== local button1Name = "Button1" local button2Name = "Button2" local button1MaterialName = button1Name local button2MaterialName = button2Name local currentStateTextName = "CurrentState" local currentStateMaterialName = currentStateTextName local button1Color = vci.assets.material.GetColor(button1MaterialName) local button2Color = vci.assets.material.GetColor(button2MaterialName) local defaultColor = vci.assets.material.GetColor(currentStateMaterialName) local myStateName = "MyState" local localMyState local transforms = {} transforms.board = vci.assets.GetTransform("Board") transforms.buttons = { vci.assets.GetTransform(button1Name), vci.assets.GetTransform(button2Name) } -- ボタンのTransformを板に追従させる local function syncTransform() local position = transforms.board.GetPosition() local rotation = transforms.board.GetRotation() for i = 1, #(transforms.buttons) do local transform = transforms.buttons[i] transform.SetPosition(position) transform.SetRotation(rotation) end end -- state値を可視化 local function showState(state) local color if state == 1 then color = button1Color elseif state == 2 then color = button2Color else color = defaultColor end vci.assets.material.SetColor(currentStateMaterialName, color) vci.assets.SetText(currentStateTextName, tostring(state)) end -- ボタンを触るとstateを変更する function onUse(name) if name == button1Name then vci.state.Set(myStateName, 1) elseif name == button2Name then vci.state.Set(myStateName, 2) end end function update() syncTransform() end function updateAll() -- state値を監視して更新があれば表示を更新 local upstreamMyState = vci.state.Get(myStateName) if upstreamMyState ~= localMyState then showState(upstreamMyState) localMyState = upstreamMyState end end -- サーバー上のstate値で表示を初期化 -- * 全員退出した際にこの値が揮発するかはサーバー側の実装により変化する -- * ルームの場合: 揮発しない -- * スタジオの場合: 揮発する localMyState = vci.state.Get(myStateName) showState(localMyState)