【Unity C#】マウスドラッグで動かす
Cubeをマウスドラッグで動かせるように、コードをつくってみましょう。
コードを作る前に、ボックスコライダーを付けておくことが前提になります。
BoxColliderコンポーネントを忘れずに、追加しておきましょう。
スクリーン座標とワールド座標
MouseDrag.csを作成し、コードは次のように記述しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseDrag : MonoBehaviour { void OnMouseDrag() { //Cubeの位置をワールド座標からスクリーン座標に変換して、objectPointに格納 Vector3 objectPoint = Camera.main.WorldToScreenPoint(transform.position); //Cubeの現在位置(マウス位置)を、pointScreenに格納 Vector3 pointScreen = new Vector3(Input.mousePosition.x, Input.mousePosition.y, objectPoint.z); //Cubeの現在位置を、スクリーン座標からワールド座標に変換して、pointWorldに格納 Vector3 pointWorld = Camera.main.ScreenToWorldPoint(pointScreen); pointWorld.z = transform.position.z; //Cubeの位置を、pointWorldにする transform.position = pointWorld; } } |
ドラッグでオブジェクトを動かす場合、スクリーン座標とワールド座標の、変換が必要。
マウスドラッグという操作は、もちろん、Z座標のような奥行きを認識することができません。
ですので、テキストやボタンのようなUIで用いられるスクリーン座標によって、現在位置を捉えねばなりません。
まずは、Cubeの位置をスクリーン座標に変換。
ドラッグ操作のマウス位置を取得。
マウス位置を再びワールド座標に変換して、現在位置として表示。
コードはこのような手順に沿っています。
プレイしてみましょう。
オブジェクトをつかんで動かせるようになりました。