Language:

サイドバー

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

メインメニュー

初心者向けガイド

VirtualCast

遊ぶ世界

THE SEED ONLINE

ニコニコ

SHOWROOM

配信

配信ツール

その他

wikiについて

デベロッパー向け


開発環境

VRM(アバター)

VCI(アイテム/背景)

VCI更新情報

更新日 - UniVCI バージョン
2021/03/17 v0.32
2.0.3b
2021/01/14 v0.31
2.0.1a
2020/12/03 v0.30
2.0.0b
2020/11/12 v0.30
2.0.0a
2020/10/22 v0.29
1.9.5b
2020/07/30 v0.29
1.9.3e
2020/06/25 v0.28
1.9.3c
2020/05/21 v0.27
1.9.2e

以前のアップデート履歴


GLB(背景)

vci:script:reference:exportshared

ExportShared

共有変数。特定のアイテムに結び付かずに、部屋に変数を保存する機能です。


main.lua
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 と似ていますが、ちょっと違います。

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

Set()

引数

  • name : string
  • value : number, string

Get()

引数

  • name : string

返り値

  • number, string

Bind()

引数

  • name : string
  • callback : 関数

概要

初期に updateAll が無かったために実装されました。

Add()

引数

  • name : string
  • value : usertype

概要

ExportState.Add項を参照してください。

共有変数の弱点と代替策

共有変数には実装上の弱点があります。

  • アイテム間での変数名重複を回避する手段が無い
  • 変数の持ち主が分からないのでクリアできない

vci.studio.shared.Get を vci.state + message で代替する例

共有変数の場合

main.lua
local value = vci.studio.shared.Get('valueName')

代替する場合

値をGetする方
main.lua
-- あらかじめ値を受け取る関数を用意して
message.On('response_valueName', function()
 
end)
-- 値を要求
message.Emit('request_valueName')
値をGetされる方
main.lua
-- 値が要求されたら
message.On('request_valueName', function() 
    -- 状態変数から値を得て投げ返す
    vci.Emit('respone_valueName', vci.state.Get('valueName'))
end)

ちょっと大変です。

vci/script/reference/exportshared.txt · 最終更新: 2021/09/21 16:45 by t-daihisa

ページ用ツール