【Defold】複数のscript が割り当てられているGameObject に対して個別にmsg.post する

Defold, DEVELOP

画像の様な構造の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 のみがメッセージを受け取ることが出来ます。

sample_a だけメッセージを受け取る様になりました。

こちらは @ooq_kamui さんに教えて頂きました!ありがとうございます!

お知らせ

Posted by kazupon