【Unity】2Dゲームオブジェクトをマウスで掴んで動かすサンプル
2Dゲームオブジェクトをマウスで掴んで動かすサンプルになります
準備
2Dゲームオブジェクトを用意します
Box Collider 2D コンポーネントとRigidbody 2D コンポーネントを追加します
Rigidbody2DはKinematicにしておきます(transform .positionで移動させるため)
コード
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
スクリプトをアタッチします
ゲームを実行し、マウスでゲームオブジェクトをドラッグして移動できることを確認します
補足説明
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()関数を使って条件分岐する必要があります
ディスカッション
コメント一覧
まだ、コメントがありません