VCIを出した際に、message(”NASakuraTransformPosPlz”)にて、VCIの個別IDが共有されるので、それを使って、message(”Sakura1MovePlz”、”Sakura2MovePlz”)にてTransformの情報を送ると、桜の木を個別に移動させることができます。

--桜の木1の移動用メッセージ(初期設置時用+同梱アイテム(桜の枝)での移動用)
--message[1]:アイテムID。他のアイテムとは、VCIの生成時のみ共有
--message[2]:TransformのTbl
--message[3]:移動時の効果音、エフェクトのON/OFF
--message[4]:花びらエフェクトのON/OFF
--message[5]:スイッチの非アクティブによる桜の木固定
function sakura1Transform(sender, name, message)
    if sakura[1].IsMine and message[1] == vci.assets.GetInstanceId() then
        local pos1 = Vector3.zero
        local rot1 = Quaternion.identity
        local scl1 = Vector3.zero
        pos1.x = message[2][1]
        pos1.y = message[2][2]
        pos1.z = message[2][3]
        rot1.x = message[2][4]
        rot1.y = message[2][5]
        rot1.z = message[2][6]
        rot1.w = message[2][7]
        scl1.x = message[2][8]
        scl1.y = message[2][9]
        scl1.z = message[2][10]
        sakura[1]._ALL_SetActive(true)
        vci.state.Set("Sakura1", true)
        sakura[1].SetPosition(pos1)
        sakura[1].SetRotation(rot1)
        sakura[1].SetLocalScale(scl1)
        if message[3] then
            audio[1][1]._ALL_Stop()
            audio[1][1]._ALL_Play(0.1, false)
            entryEffect[1]._ALL_Stop()
            entryEffect[1]._ALL_Play()
        end
        if message[4] then
            sakuraEffect[1]._ALL_Stop()
            sakuraEffect[1]._ALL_Play()
        end
        switch[1]._ALL_SetActive(message[5])
        vci.state.Set("FixState1", message[5])
    end
end
vci.message.On("Sakura1MovePlz", sakura1Transform)

--桜の木2の移動用メッセージ(初期設置時用+同梱アイテム(桜の枝)での移動用)
--message内容は、桜の木1と同様
function sakura2Transform(sender, name, message)
    if sakura[2].IsMine and message[1] == vci.assets.GetInstanceId() then
        local pos2 = Vector3.zero
        local rot2 = Quaternion.identity
        local scl2 = Vector3.zero
        pos2.x = message[2][1]
        pos2.y = message[2][2]
        pos2.z = message[2][3]
        rot2.x = message[2][4]
        rot2.y = message[2][5]
        rot2.z = message[2][6]
        rot2.w = message[2][7]
        scl2.x = message[2][8]
        scl2.y = message[2][9]
        scl2.z = message[2][10]
        sakura[2]._ALL_SetActive(true)
        vci.state.Set("Sakura2", true)
        sakura[2].SetPosition(pos2)
        sakura[2].SetRotation(rot2)
        sakura[2].SetLocalScale(scl2)
        if message[3] then
            audio[2][1]._ALL_Stop()
            audio[2][1]._ALL_Play(0.1, false)
            entryEffect[2]._ALL_Stop()
            entryEffect[2]._ALL_Play()
        end
        if message[4] then
            sakuraEffect[2]._ALL_Stop()
            sakuraEffect[2]._ALL_Play()
        end
        switch[2]._ALL_SetActive(message[5])
        vci.state.Set("FixState2", message[5])
    end
end
vci.message.On("Sakura2MovePlz", sakura2Transform)

--初回ロード時に、messageにてVCIの個別IDを共有
--桜の木は、非アクティブ化
function update()
    if vci.state.Get("InitialSetMes") == nil then
        vci.message.Emit("NASakuraTransformPosPlz", vci.assets.GetInstanceId())
        sakuraEffect[1].Stop()
        sakuraEffect[2].Stop()
        sakura[1]._ALL_SetActive(false)
        sakura[2]._ALL_SetActive(false)
        vci.state.Set("Sakura1", false)
        vci.state.Set("Sakura2", false)
        vci.state.Set("InitialSetMes", "Done")
    end
end

移動させるためのスクリプトの一例は以下の通りです。

function naSakuraTransformMessage(sender, name, message)
    for i = 1, 2 do
        local tempTrns = {}
        tempTrns[1] = vci.assets.GetTransform("Sakura"..i).GetPosition().x
        tempTrns[2] = vci.assets.GetTransform("Sakura"..i).GetPosition().y
        tempTrns[3] = vci.assets.GetTransform("Sakura"..i).GetPosition().z
        tempTrns[4] = vci.assets.GetTransform("Sakura"..i).GetRotation().x
        tempTrns[5] = vci.assets.GetTransform("Sakura"..i).GetRotation().y
        tempTrns[6] = vci.assets.GetTransform("Sakura"..i).GetRotation().z
        tempTrns[7] = vci.assets.GetTransform("Sakura"..i).GetRotation().w
        tempTrns[8] = vci.assets.GetTransform("Sakura"..i).GetLocalScale().x
        tempTrns[9] = vci.assets.GetTransform("Sakura"..i).GetLocalScale().y
        tempTrns[10] = vci.assets.GetTransform("Sakura"..i).GetLocalScale().z
        vci.message.Emit("Sakura"..i.."MovePlz", {message, tempTrns, false, true, false})
    end
end
vci.message.On("NASakuraTransformPosPlz", naSakuraTransformMessage)