【Unity】オブジェクトをドラッグ操作する方法(スマホのタッチ対応)

どうも、だらはです。
今回はオブジェクトをドラッグ操作する方法を紹介したいと思います。
本内容はスマホ対応です!

スポンサーリンク

実装手順

実装手順は以下の通りとなります。

◆実装手順

  1. ゲームオブジェクトにコライダーをアタッチ。
  2. DragObj.cs(後述)をオブジェクトにアタッチ。

以上です。

◆DragObj.cs

using UnityEngine;

public class DragObj : MonoBehaviour
{
    private Vector3 screenPoint;

    void OnMouseDrag()
    {
        screenPoint = Camera.main.WorldToScreenPoint(transform.position);

        float screenX = Input.mousePosition.x;
        float screenY = Input.mousePosition.y;
        float screenZ = screenPoint.z;

        Vector3 currentScreenPoint = new Vector3(screenX, screenY, screenZ);
        Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint);
        transform.position = currentPosition;
    }
}

上記スクリプトのOnMouseDrag()メソッドは、コライダーがクリックを押され続けるときに呼ばれるメソッドです。
他にも似た機能のメソッドとして以下があります。

  • OnMouseDown():GUIElementまたはCollider上でマウスを押下したときに呼び出されます。
  • OnMouseEnter():GUIElement または Collider 上にマウスが乗ったときに呼び出されます
  • OnMouseExit():GUIElement または Collider 上からマウスが離れたときに呼び出されます
  • OnMouseOver():GUIElement または Collider 上にマウスがあり続ける限り毎フレーム呼び出され続けます
  • OnMouseUp():ユーザーがマウスボタンを離したときに呼び出されます
  • OnMouseUpAsButton():マウスを押した時と同じ GUIElement や Collider 上でマウスを離した時のみに呼び出されます。

公式リファレンスにリンク集があるので一応貼っておきますね。

Camera.main.WorldToScreenPointは、ワールド座標をスクリーン座標に変換するメソッドです。
対して、Camera.main.ScreenToWorldPointは、スクリーン座標をワールド座標に変換するメソッドです。

本スクリプトでは、マウスのXY座標をスクリーン座標で取得し、ゲームオブジェクトのXY座標に代入。
スクリーン座標をワールド座標に変換することでゲームオブジェクトをさもドラッグしているかのように見せています。

まとめ

いかがでしたでしょうか。

  • Camera.main.WorldToScreenPointは、ワールド座標をスクリーン座標に変換するメソッド。
  • Camera.main.ScreenToWorldPointは、スクリーン座標をワールド座標に変換するメソッド。

今回紹介したスクリプトはコピペで動作するので是非試してみてください!
また、以下に座標変換を用いた別のスクリプトを紹介しています。
まだピンとこない方は是非参考にして頂けたらと思います。

以上、だらはでした。

スポンサーリンク

応用

Posted by daraha_gm