2Dゲームオブジェクトをマウスで掴んで動かすサンプル
以下は、Unityで2Dゲームオブジェクトをマウスで掴んで動かすサンプルの説明です。
準備
- 2Dゲームオブジェクトを用意する
- ゲームオブジェクトに
Box Collider 2D
コンポーネントを追加する - ゲームオブジェクトに
Rigidbody 2D
コンポーネントを追加する - マウスで操作するために、以下のスクリプトを作成する
using UnityEngine;
public class MouseDrag : MonoBehaviour
{
private Vector3 offset;
void OnMouseDown()
{
offset = gameObject.transform.position - GetMouseWorldPos();
}
void OnMouseDrag()
{
transform.position = GetMouseWorldPos() + offset;
}
private Vector3 GetMouseWorldPos()
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = -Camera.main.transform.position.z;
return Camera.main.ScreenToWorldPoint(mousePos);
}
}
スクリプトの説明
private Vector3 offset;
マウスで掴んだゲームオブジェクトの中心座標と、マウスカーソルの座標の差分を格納する変数です。
void OnMouseDown()
マウスでゲームオブジェクトをクリックしたときに呼び出されるメソッドです。offset
変数に、マウスカーソルとゲームオブジェクトの中心座標の差分を格納します。
void OnMouseDrag()
マウスでゲームオブジェクトをドラッグしているときに呼び出されるメソッドです。GetMouseWorldPos()
メソッドを使ってマウスカーソルの座標をワールド座標に変換し、offset
変数を足してゲームオブジェクトを移動させます。
private Vector3 GetMouseWorldPos()
マウスカーソルの座標をスクリーン座標からワールド座標に変換するメソッドです。Input.mousePosition
でスクリーン座標を取得し、Camera.main.ScreenToWorldPoint(mousePos)
でワールド座標に変換して返します。
実行
- ゲームオブジェクトを選択し、
MouseDrag
スクリプトをアタッチします - ゲームを実行し、マウスでゲームオブジェクトをドラッグして移動できることを確認します
以上が、Unityで2Dゲームオブジェクトをマウスで掴んで動かすサンプルの説明です。
補足説明
Box Collider 2D
Box Collider 2D
コンポーネントを追加することで、2D物理演算エンジンによる当たり判定を設定できます。ここでは、Box Collider 2D
を使って、ゲームオブジェクトの当たり判定を設定します。
Rigidbody 2D
Rigidbody 2D
コンポーネントを追加することで、2D物理演算エンジンによる物理挙動を設定できます。ここでは、Rigidbody 2D
を使って、ゲームオブジェクトの移動を制御します。
Camera.main
Camera.main
は、シーンに存在するメインカメラを取得するためのプロパティです。GetMouseWorldPos()
メソッドでは、マウスカーソルのスクリーン座標をワールド座標に変換する際に、カメラの位置を考慮する必要があります。そのため、Camera.main.transform.position.z
を使って、カメラのZ座標を取得しています。
注意点
この方法は、1つのオブジェクトの移動に対してのみ使用可能です。複数のオブジェクトをマウスでドラッグして移動させる場合は、オブジェクトごとにMouseDrag
スクリプトを作成する必要があります。
また、この方法ではマウスの左クリックでのみオブジェクトをドラッグできます。右クリックやマウスホイールなど、他のマウスイベントでドラッグしたい場合は、Input.GetMouseButton()
関数を使って条件分岐する必要があります。
結果
以上の手順で作成したスクリプトをアタッチした2DゲームオブジェクトをUnity Editor上で実行すると、マウスでクリックした位置を中心としたゲームオブジェクトをドラッグして移動できるようになります。
ディスカッション
コメント一覧
まだ、コメントがありません