【Unity】ドラックアンドドロップでゲームオブジェクトを動かす

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

ドラック&ドロップでゲームオブジェクトを動かします。

ゲーム内でユーザーがドラッグ&ドロップ機能を使う場面は、
プレイヤーがアイテムを移動・装備させる際や、UI要素をカスタマイズして配置し直す際、
ゲーム内の建設やレベルデザインでオブジェクトを配置する際などがあります。

ドラッグ&ドロップを実装することでゲーム開発の幅が広がるので、習得したい機能の一つです。
本記事では、ゲームオブジェクトやCanvas全体、各UIの場合に分けてドラッグ&ドロップを実装します。

本記事は次の人におすすめ
  • Unityでドラッグアンドドロップを使用したい。
スポンサーリンク

ゲームオブジェクトを移動

ゲームオブジェクトをユーザーのマウス入力から稼働できるようにします。
Hierarchyウィンドウから「2DObject>Sprites」で1つ選択します。

Gameオブジェクトが画面上に表示されない場合は、
CanvasとMain Cameraを調節する必要があります。

Render Modeについて解説しています。

ソースコード

using UnityEngine;

public class DragObject : MonoBehaviour
{
    private Vector3 offset;
    private bool isDragging = false;

    void OnMouseDown()
    {
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        offset = transform.position - mousePosition;
        isDragging = true;
    }

    void OnMouseDrag()
    {
        if (isDragging)
        {
            Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = mousePosition + offset;
        }
    }

    void OnMouseUp()
    {
        isDragging = false;
    }
}

解説

  • 名前空間

UnityEngine:Unityエンジンのクラスやメソッドにアクセスするために必要です。
ゲームオブジェクトの操作やユーザー入力の処理など、Unityの基本機能を利用できます。

  • フィールド(メンバ変数)

「offset」:オブジェクトの位置とマウスの位置の差分を保持します。差分を用いて、ドラッグ中のオブジェクトがマウスの位置に対して正しく動くようにします。
「isDragging」:オブジェクトが現在ドラッグ中であるかどうかを判定するフラグです。ドラッグ開始時にtrueに設定され、ドラッグ終了時にfalseに設定されます。

  • OnMouseDownメソッド

マウスボタンが押されたときに呼び出されます。
マウスのスクリーン座標をワールド座標に変換し、その位置とオブジェクトの現在の位置との差分(オフセット)を計算して保存します。また、isDraggingフラグをtrueに設定してドラッグを開始します。

  • OnMouseDragメソッド

マウスがドラッグされている間に毎フレーム呼び出されます。
isDraggingフラグがtrueの場合、現在のマウスのスクリーン座標をワールド座標に変換し、オフセットを加算してオブジェクトの新しい位置を計算し、その位置にオブジェクトを移動させます。

  • OnMouseUpメソッド

マウスボタンが離されたときに呼び出されます。
isDraggingフラグをfalseに設定してドラッグを終了します。

実装

スクリプトを対象のゲームオブジェクトにアタッチします。
さらに、「Add Component」からCollider2Dと入力して、いずれか1つを追加します。
本製作では、「Box Collider2D」を採用しました。

プロジェクトを再生すると、Gameオブジェクトが動きます。

まとめ

ゲームオブジェクトをドラッグアンドドロップするには、OnMouseDown・Drag・UPの3つを使用します。
また、対称のオブジェクトにスクリプトをアタッチして、Collider2Dと追加すると稼働します。

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする
タイトルとURLをコピーしました