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)