0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Action Game Maker でドラッグ&ドロップ

Last updated at Posted at 2025-09-05

Action Game Maker でドラッグ&ドロップする方法を解説します。

この記事を書いた後にプラグインがあるのを発見した……こちらでもできるようです。

1.プロジェクト設定

まずメニューから、プロジェクト設定>インプットマップで、マウスボタンを設定します。
左ボタンを、Mouse_Lとします。(右ボタンMouse_Rも設定しているけどはここでは使いません)

プロジェクト設定インプットマップ.jpg

同じくプロジェクト設定>一般>物理>2Dを全部0にして、重力の効果をなくしておきます。(無重力は説明のためなので、必要なら重力ありでも可)
プロジェクト設定重力jpg.jpg

2.ゲームシーン

 ゲームシーン(game_scene2)を新規作成して、SceneTransitionに配置
 ゲームオブジェクト(dragdrop)も新規作成して。ゲームシーン(game_scene2)のBaselayerに配置します。
画像ないですが、ゲームシーン(game_scene2)のインスペクターでの重力も0にしておきます。

ゲームシーン.jpg

3.ColorRectとArea2Dを配置

 ゲームオブジェクト(dragdrop)に、ColorRect(とりあえず四角形を表示)とArea2Dを配置し、さらにArea2DにCollisionShape2Dを取り付けます。

3-1.ColorRect

 ColorRectは、右のインスペクターのレイアウト>アンカー位置を中央に、Mouse>フィルター設定をignoreにします。フィルター設定を忘れるとマウスクリックが検出されませんので注意。

ColorRect.jpg

3-2.CollisionShape2D

CollisionShape2Dのインスペクターの一番上、シェイプを新規RectangleShape2Dに設定。
その領域(青い四角形)を、四角形と同じにしておきます。ここの領域でマウスクリックの判定をします。
CollisionShape2D.jpg

3-3.Area2D

 Area2DにGDScriptを付けます。
 ソースは以下。ソースを貼り付けたら、右のインスペクターの一番上variable settingsに、左のVariableSettingsというシーンをドラッグ&ドロップして設定します。

Area2D_GDScript.jpg

dragdrop.gd
extends Area2D
#マウスでおいたり持ち上げたりできるオブジェクト
@export var variable_settings: VariableSettings

var _drag_mode = 0
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
	if _drag_mode:
		var m_pos = get_global_mouse_position() 
		variable_settings.set_value("position_x", m_pos.x)
		variable_settings.set_value("position_y", m_pos.y)
	pass
	
func _on_input_event(_viewport, _event, _shape_idx):
	if _event is InputEventMouseButton:
		
		if _event.is_action_pressed("Mouse_L"):
			_drag_mode = true
			print("[Mouse_L]Click/Unclick at: ", _event.position)
		elif _event.is_action_released("Mouse_L"):
			_drag_mode = false
	elif _event is InputEventMouseMotion:
		print("Mouse Motion at: ", _event.position)

3-4 input_eventシグナルを接続

 マウスが、Area2DのCollisionShape2D内に入ったことを検出するのに、input_eventシグナルを使います。Area2Dの右のノード>シグナルから、input_eventをダブルクリック。_on_input_eventを選択すると、シグナルとGDScriptが接続されます。

接続中の画面
input_event接続.jpg

接続完了すると、緑色のアイコンがシグナルとスクリプトの関数のところに表示されます。
input_event接続完了.jpg

4.実行すると四角形がドラッグできるようになりました。

ゲームオブジェクトには通常のビジュアルスクリプトをつけることができます。
実行画面 ↓

5.補足説明

ActionGameMakerのノードにはVisualScriptかGDScriptの一つしか付けられないので、新たにArea2Dを追加しています。
Area2Dで親のCollisionShape2Dのシグナルが検出できなかったので、子のCollisionShape2Dのシグナルを利用しています。
マウスの入力を感知し、
ボタンが押されたら、_drag_mode=true、
離したら_drag_mode=false

_drag_mode=trueの間、
var m_pos = get_global_mouse_position()
variable_settings.set_value("position_x", m_pos.x)
variable_settings.set_value("position_y", m_pos.y)
で、親オブジェクトの座標(position)を直接、マウスカーソルの座標(m_pos)に書き換えています。
これでドラッグ&ドロップができました。
直接座標を書き換えているので、ドラッグ中の当たり判定はおかしな動きになってしまうので、当たり判定の設定に工夫が必要です。(ここでは特に説明していません)

6.以下のサイトを参考にしました。(感謝)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?