🐀
【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