Unityでドラッグ&ドロップを簡単に実装【Unityメモ】

Unityで簡単なドラッグ&ドロップを実装してみます。「マウスでオブジェクトを選択」、「好きな場所に移動」と言う感じですね。

はじめに

Unityのバージョンは2021.3.14f1です。OnMouseDragを利用して簡単に実装してみます。

実装開始

出来るだけ簡単な感じで実装してみます。

オブジェクトの作成

まずは動かすオブジェクトを作成、「2D Object」→「Sprites」→「Square」を追加します。

「Add Component」から「Box Collider 2D」を追加します。

スクリプトを作成

「Create」→「C# Script」を選択、スクリプト名はDaDとしておきます。

スクリプトの中身を下記に変更します。

using UnityEngine;

public class DaD : MonoBehaviour
{
    [SerializeField] Camera _cam;

    private void OnMouseDrag()
    {
        transform.position = (Vector2)_cam.ScreenToWorldPoint(Input.mousePosition);
    }
}

オブジェクトをマウスの位置に合わせて移動する感じですね。ものすごく簡単です。ちなみに座標位置はVector2に変換しないとZ座標がデフォルトの-10になり、オブジェクトが無くなったように見えてしまいます。

スクリプトをアタッチして、パラメータにカメラをセット。

下記のような感じでドラッグ&ドロップでオブジェクトを動かすことが出来ます。

座標ズレの修正スクリプト

上記のスクリプトの場合、オブジェクトの端を選択すると、マウスの中心位置にオブジェクトが移動します。それをしたくない場合、選択した時のマウス位置を取得して補正を加えて移動させます。下記のような感じですね。

using UnityEngine;

public class DaD : MonoBehaviour
{
    [SerializeField] Camera _cam;
    private Vector3 offset;

    private void OnMouseDown()
    {
        offset = gameObject.transform.position - GetMousePos();
    }

    private void OnMouseDrag()
    {
        transform.position = GetMousePos + offset;
    }

    private Vector3 GetMousePos()
    {
        return _cam.ScreenToWorldPoint(Input.mousePosition);
    }

}

簡単な方法の一例と言う感じ。uGUIを利用しているときは、IDragHandlerを利用ですね。

タイトルとURLをコピーしました