Roba Memo - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

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

Unityでゲームオブジェクトをドラッグさせると、動かした瞬間にゲームオブジェクトがカーソルの位置に移動してしまう。
大きい画像を少しずつドラッグさせたい場合は、困る。
ということで、自動センタリングをさせない方法をメモ。

コード

   Vector3 offset;

    public void OnBeginDrag ()
    {
        Vector3 start_position = Camera.main.ScreenToWorldPoint (Input.mousePosition);
        offset = transform.position - start_position;
    }

    public void OnDrag ()
    {
        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, 0);
    }

考え方

自動センタリングが働くのは、MouseDownして動かした時。
つまり、MouseDownしたときはセンタリングされていない。
これを利用して、マウスと位置とオブジェクトの基準点の差をoffsetに代入し、ドラッグが始まったらオフセットする。

以上。