🐀
【Godot Engine】mouse_filter プロパティについて【GDScript】
Godot Engine 3.4.4
mouse_filterはControlオブジェクトのプロパティの一つです。
Stopにするとマウス入力イベントは自身で止まります。
Passにすると親ノードにも伝達します。
Ignoreにするとイベントに反応しなくなります。
例えば以下のようなノード構成のシーンがあったとします。
PanelとButtonがControlの子になっている場合です。
Control
--Panel
--Button
そして以下のようにオブジェクトが配置されているとします。

ここではシグナルは以下のように接続しておき、インプットマップ上でclickが左クリックに割り当てられているものとします。
extends Control
func _on_Control_gui_input(event):
if event.is_action_pressed("click"):
print("Control Clicked!")
func _on_Panel_gui_input(event):
if event.is_action_pressed("click"):
print("Panel Clicked!")
func _on_Button_pressed():
print("Button Clicked!")
当然ですがButtonをクリックすれば"Button Clicked!"が表示され
Panelをクリックすれば"Panel Clicked!"が表示されます。
ではButtonをクリックした際にイベントをPanelにも伝達させたい場合は
どうしたらよいでしょうか?
Buttonのmouse_filterをPassに設定すればよさそうに思えます。
しかし、これだけだとButtonはPanelの子ではないためイベントが伝達されません。
なのでノード構成を以下のように変更します。ButtonをPanelの子にするだけです。
Control
--Panel
----Button
これでうまくいくはずです。
もちろん、Panel側でもPassに設定すれば_on_Control_gui_inputも呼び出されますし
Ignoreに設定すれば_on_Panel_gui_inputは呼び出されません。
参考URL:
Discussion