あれ?ドラッグ&ドロップが動かない…?
Unityでゲーム開発をしているとき、InputSystemを使ってドラッグ&ドロップ処理を実装しようとしてマウスが反応しない、イベントが発火しない、なぜか動かないという壁にぶつかっていませんか?
実はこれ、InputSystemの設定やオブジェクト構成にありがちな落とし穴が原因であることが多いんです。
本記事では、UnityでInputSystemに対応した正しいドラッグ&ドロップ実装方法と、動作しないときの具体的な原因と解決策を、初心者にもわかりやすく徹底解説します。
Unity6でドラッグ&ドロップが動かない原因とは?
Colliderがついていないオブジェクトは反応しない
Colliderがついていないと絶対反応しないので忘れずにオブジェクトを作成したらつけましょう。
EventSystemのモジュールが古いままになっている
EventSystemを作成する場合、基本的には新しいモジュールで作成されるはずなので念の為確認してみる程度で大丈夫だと思いますが、新しくプロジェクトにInputSystemを追加する場合はEventSystemのモジュールも新しいものに変更しておくのを忘れずに行いましょう。
UIにイベントが吸われているケース
上に書いた原因を直しても解決しない場合、UIを一度非表示にしてみましょう。意外とUIのレイキャスト関連などでうまく反応しなくなっているかもしれません。
InputSystemでドラッグ&ドロップを実装する
それでは新InputSystemでドラッグ&ドロップを実装してみましょう。
まずはSpriteを作成してColliderを追加します。
新InputSystemではOnDragなどの関数は使用できないので自分で実装する必要があります。
中身の実装自体はそこまで難しくないので一旦はコピーしてそのまま実装でも問題ないと思います。
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
public class Draggable : MonoBehaviour, IPointerDownHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
{
private Vector3 offset;
private Camera mainCamera;
void Awake()
{
mainCamera = Camera.main;
}
public void OnPointerDown(PointerEventData eventData)
{
Vector3 mousePos = mainCamera.ScreenToWorldPoint(Mouse.current.position.ReadValue());
offset = transform.position - new Vector3(mousePos.x, mousePos.y, transform.position.z);
}
public void OnBeginDrag(PointerEventData eventData)
{
// Optionally start visual feedback
}
public void OnDrag(PointerEventData eventData)
{
Vector3 mousePos = mainCamera.ScreenToWorldPoint(Mouse.current.position.ReadValue());
transform.position = new Vector3(mousePos.x, mousePos.y, transform.position.z) + offset;
}
public void OnEndDrag(PointerEventData eventData)
{
// Optionally finish visual feedback
}
}
まとめ:InputSystemでのドラッグ不具合は「設定」と「構成」がカギ!
Unity6でのドラッグ&ドロップ実装がうまくいかないとき、原因の多くは以下のような設定ミスや構成の見落としにあります。
- EventSystemに古いモジュールが残っている
- 対象オブジェクトにColliderが付いていない
- InputSystemの座標取得やカメラのZ位置がズレている
- UIと競合していてPointerイベントが届かない
特に、旧InputManagerの知識のまま新InputSystemを使うと混乱しやすいため、公式ドキュメントやこの記事のテンプレートを活用し、段階的に構築していくことが大切です。
本記事で紹介した実装例やトラブルチェックリストを参考にすれば、ドラッグ&ドロップが反応しない問題は確実に解消できます。