====== 複数のVCI間で変数をやり取りする ======
=== サンプルデータ ===
送信側:https://virtualcast.jp/products/6bed6503ff44d229df6225ff45534fd7e1f04b1d307d8c319fea7899d14bf7f2
受信側:https://virtualcast.jp/products/84144a282ddc1eb0be1de580cb69357b7d602db74c430e9b5da1f432a984ee4f
=== Unitypackage ===
{{ vci:sample:sample_advanced:tutorial_message_send.zip |}}
===== 解説 =====
VCI v0.17より、vci.messageが実装されてVCIでメッセージの送信、受信を行うことが可能になりました。\\
これにより複数のVCIの間で変数のやりとりをすることができます。
{{vci:sample:sample_advanced:tutorial_message_send.png?400|}}
今回は送信側、受信側の2つのVCIを作成してメッセージの送受信を行います。
送信側のボックスのVCIをOnUseするとメッセージが送信され、受信側の条件と一致した場合に処理が実行されます。\\
今回のサンプルでは受信側のシリンダーVCIに上向き方向の力がかかり飛び跳ねます。
vci.messageの詳しい仕様はこちらをご覧ください\\
[[vci:updatelog:1.5.4a|VirtualCast1.5.4a VCI更新]]
===== VCIスクリプト =====
function onUse(self)
-- メッセージ名: MSG_NAME
-- メッセージの内容: 1
vci.message.Emit("send_box_state","addforce_on")
end
function onUnuse(use)
-- メッセージ名: MSG_NAME
-- メッセージの内容: 1
vci.message.Emit("send_box_state","addforce_off")
end
local sub = vci.assets.GetTransform("get")
function onMessage(sender, name, message)
-- senderはテーブルになっています。vci.message.Emit関数を実行したvciの情報
-- {
-- type: "vci"
-- name: "vciの名前"
-- }
-- 今後の更新で sender が違うメッセージを実装予定です
for k, v in pairs(sender) do
print(k .. ":" .. v)
end
print(name)
print(message)
if name=="send_box_state" and message=="addforce_on" then
print("forceon")
sub.AddForce (1000*sub.GetUp())
end
end
--シーンでvci.message.Emitが実行されたときにonMessage関数が呼び出される
vci.message.On("send_box_state", onMessage)