Language:

サイドバー

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

メニュー

VirtualCast

THE SEED ONLINE

配信

その他

リリース情報

デベロッパー向け


開発環境

VRM

VCI

GLB

vci:sample:onuse:no1

アイテムを使ったときに位置や回転をリセットする


※この記事は「UniVCI-0.15」時点のものです。

サンプルデータ:https://seed.online/items/b436ef0c623b8a258d8294ec7fa106001ec0a96336615781cd1c7b6ad8330125

アイテムを使ったときに処理を実行するには「onUse」を使用します。

ここでは「VCI Object」に、移動できる「VCI SubItem」が複数ある場合、
指定の「VCI SubItem」を使うと初期位置へ戻る処理を作成します。
サンプルは平たいボックスの上に球が陳列しており、
ボックスを掴んで移動させてもアイテムを使用すると、
球が元の位置に戻るようになっています。

1. 新しくGameObjectを作成し、その中にCubeを1個、Sphereを5個入れ子にします。
(作例ではSphereが5個ですが、いくつでも構いません)

GameObjectの名前は「ResetSample_VCI」としていますが、任意の名前でも可です。
Cubeの名前は「Cube」と指定し、Sphereの名前は「Ball1からBall5」と指定します。
Cubeは地面に貫通しないようY座標を1.0に指定し、Sphereは更に1.5に指定します。
またCubeのスケールを平たくし、SphereのスケールはCubeの上に収まるように調整します。

2. GameObjectに「VCI Object」コンポーネントをアタッチし、
CubeとSphereに「VCI SubItem」コンポーネントをアタッチします。
この時、「Rigitbody」コンポーネントもアタッチされます。
Cubeは重力を使用しないため、「Rididbody」の「Use Gravity」をOFF、「Is Kinematic」をONにし、
なおかつ掴んで移動できるようにするため「VCI SubItem」の「Grabbable」をONにします。
Sphereはアタッチ後のパラメータそのままにします。

3. 更にどのユーザーがアイテムを使用しても、きちんと位置が初期位置へ戻るように、
「VCI SubItem」の「GroupId」を1に変更します。
こうすることで「GroupId」が1のSubItemを一括で制御することができるようになります。

※詳しくは「VCIコンポーネントの詳細/GroupID」を参照してください。

4. GameObjectの「VCI Object」コンポーネントのScriptsのSizeを1に指定し、
Nameに「main.lua」を記入、Sourceに以下スクリプトを記入します。

main.lua
local Cube = vci.assets.GetTransform("Cube")
local Balls = {...}
local Balloffsets = {...}
for i=1,5 do
    Balls[i] = vci.assets.GetTransform("Ball"..tostring(i))
    Balloffsets[i] = Balls[i].GetLocalPosition()
end
 
function onUse(use)
    if use == "Cube" then
        local Cube_localPos = Cube.GetLocalPosition()
        local Cube_localRot = Cube.GetLocalRotation()
        local rotationAngles = Cube_localRot.eulerAngles
        --玉の修正
        for i=1,5 do
            local relativeDirection = Balloffsets[i]
            local goalPosition = Quaternion.Euler(0, rotationAngles.y, 0) * relativeDirection
            Balls[i].SetLocalPosition( goalPosition + Cube_localPos )
            Balls[i].SetVelocity(Vector3.zero)--rigitbodyにかかる速度をゼロに
            Balls[i].SetAngularVelocity(Vector3.zero)--rigitbodyにかかる回転をゼロに
        end
    end
end
vci/sample/onuse/no1.txt · 最終更新: 2022/03/06 23:01 by Ramen

ページ用ツール