godotでマウスでオブジェクトをつかむ処理
func _on_input_event(viewport, event, shape_idx):メソッドを使うとできる。
このメソッドはオブジェクトのコリジョン内で起きているイベントのみ取得する。
この中でマウス操作を記載すれば、オブジェクトのあたり判定内でなおかつクリックした、クリックしているという動作を取得できる。
コリジョン内にマウスの座標が含まれているかの判定を行うのはジオメトリ使ったりとめんどいので、
ドラッグ機能はフラグを自分で管理するしかない。
対象のオブジェクトシーンに記載する内容全文
extends Area2D
#マウスでおいたり持ち上げたりできるオブジェクト
var _drag_mode = 0
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
#マウスイベントのpressedでも取れる
if _drag_mode:
var m_pos = get_viewport().get_mouse_position()
position = m_pos
pass
#自分の当たり判定内で起きたときのみイベント通知
func _on_input_event(viewport, event, shape_idx):
if event is InputEventMouseButton:
if event.is_action_pressed("MOUSE_L"):
_drag_mode = true
#position = event.position
print("[MOUSE_L]Click/Unclick at: ", event.position)
elif event.is_action_released("MOUSE_L"):
_drag_mode = false
elif event.is_action_pressed("MOUSE_R"):
#ここでドラッグ処理書いても動くはず
pass
elif event is InputEventMouseMotion:
print("Mouse Motion at: ", event.position)
この記事が気に入ったらサポートをしてみませんか?