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:exportvci

vci(ExportVci)

VCIの各種情報・機能にアクセスできます。

メンバ変数・関数一覧

[EmbeddedScriptWorkspace]フォルダ内の[types.lua]を開くと一覧を確認できます。

---vci module
---@class ExportVci
---@field StartCoroutine fun(coroutine: usertype)
---@field studio ExportStudio
---@field me ExportMe
---@field assets ExportAssets
---@field state ExportState
---@field message ExportMessage
---@field ResetRootTransform fun()
---@field _ALL_ResetRootTransform fun()
メソッド 説明 VCバージョン
StartCoroutine fun(coroutine: usertype) コルーチンを開始します 1.9.2a以降
studio
me
assets
state
message
ResetRootTransform fun() VCIのTransformをリセットします 1.9.2a以降
_ALL_ResetRootTransform fun() VCIのTransformをリセットします 1.9.2a以降

コルーチンを開始する

VCバージョン: 1.9.2a以降

Luaのコルーチン機能を用いて、Unityのコルーチンのような記述ができます。

サンプル

main.lua
vci.StartCoroutine(
    coroutine.create(
        function()
            print("コルーチン開始")
            local i = 0
            while i < 10 do
                -- カウントする
                print(i)
                i = i + 1
                -- 0.5秒スリープする
                sleep(0.5)
            end
            print("コルーチン終了")
        end
    )
)
 
function sleep(sec)
    local t0 = os.time() + sec
    while os.time() < t0 do
        -- コルーチンの実行を中断する
        coroutine.yield()
    end
end

コルーチンは複数実行できますが、過剰に追加すると動作が不安定になるのでご注意ください。

また、無限ループにもご注意ください。coroutine.yieldがループ内に入っている場合は問題ありませんが、 coroutine.yieldをループ内に入れなかった場合、Too Many Instructionsというエラーが表示され、スクリプトが停止します。

サンプルデータ

複数のコルーチンを用いてアニメーションするサンプルです。

coroutinesample.zip

main.lua
local cube = vci.assets.GetTransform("Cube")
 
vci.StartCoroutine(
    coroutine.create(
        function()
            print("Coroutine1: start")
            while true do
                local r = math.random()
                local g = math.random()
                local b = math.random()
                vci.assets.SetMaterialColorFromIndex(0, Color.__new(r,g,b))
                sleep(2)
            end
        end
    )
)
 
vci.StartCoroutine(
    coroutine.create(
        function()
            print("Coroutine2: start")
            local ry = 0
            while true do
                cube.SetLocalRotation(Quaternion.Euler(0, ry, 0))
                ry = ry + 1
                coroutine.yield()
            end
        end
    )
)
 
vci.StartCoroutine(
    coroutine.create(
        function()
            print("Coroutine3: start")
            local cnt = 0
            while true do
                local x = 2 * math.cos(cnt / 100)
                local z = 2 * math.sin(cnt / 100)
                cube.SetLocalPosition(Vector3.__new(x, 4, z))
                cnt = cnt + 1
                coroutine.yield()
            end
        end
    )
)
 
function sleep(sec)
    local t0 = os.time() + sec
    while os.time() < t0 do
        coroutine.yield()
    end
end

VCIのTransformをリセットする

VCバージョン: 1.9.2a以降

通常の場合、小物VCIは、アバターの目の前の座標に生成されます。 生成後にResetRootTransformを呼ぶと、VCIの大元のTransformがリセットされます。座標が原点にセットされ、角度もリセットされます。

サンプル

main.lua
vci.ResetRootTransform()
vci/script/reference/exportvci.txt · 最終更新: 2021/06/17 19:36 by t-daihisa

ページ用ツール