Unityでゲームオブジェクトをドラッグさせると、動かした瞬間にゲームオブジェクトがカーソルの位置に移動してしまう。
大きい画像を少しずつドラッグさせたい場合は、困る。
ということで、自動センタリングをさせない方法をメモ。
コード
ゲームオブジェクトにコライダーをつけておくこと。
Vector3 offset; float _z; void OnMouseDown () { Vector3 start_position = Camera.main.ScreenToWorldPoint (Input.mousePosition); offset = transform.position - start_position; _z = transform.position.z; } void OnMouseDrag () { Vector3 mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition); float _x = mousePos.x + offset.x; float _y = mousePos.y + offset.y; transform.position = new Vector3 (_x, _y, _z); }
考え方
自動センタリングが働くのは、MouseDownして動かした時。
つまり、MouseDownしたときはセンタリングされていない。
これを利用して、マウスと位置とオブジェクトの基準点の差をoffsetに代入し、ドラッグが始まったらオフセットする。
以上。
2018/03/24 Z軸を固定するようにコードに修正。