【Defold】複数のscript が割り当てられているGameObject に対して個別にmsg.post する
画像の様な構造のGameObject があるとします。
script の中身はどちらも同じ message_id を受け取り処理を実行しているものとします。
function on_message(self, message_id, message, sender)
if message_id == hash("setup") then
print("The setup of sample_a has been called.")
end
end
function on_message(self, message_id, message, sender)
if message_id == hash("setup") then
print("The setup of sample_b has been called.")
end
end
この様な構造をしたGameObject をfactory.create で生成し何も考えずに msg.post するとスクリプトそれぞれが message を受け取る形になってしまいます。
function init(self)
local id = factory.create(factory_url)
msg.post(id, hash("setup"))
end
しかし片方にだけ msg.post したいことがあります。そんな時は
function init(self)
local id = factory.create(factory_url)
local url = msg.url(nil, id, "sample_a")
msg.post(url, hash("setup"))
end
とします。msg.url の第1引数をnil にする所がポイントです。すると指定した script のみがメッセージを受け取ることが出来ます。
こちらは @ooq_kamui さんに教えて頂きました!ありがとうございます!