ロバメモ - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

ドラッグする時にオブジェクトがカーソルに自動でセンタリングしないようにする

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軸を固定するようにコードに修正。