[Unity]NGUIのOnDragイベントを使う

NGUI のスプライトをドラッグで動かせるようにしたときのメモです。

(2013/5/9 追記 : 動かすだけなら UIDragObject だけで済みます。こちらはコーディング不要です。)

スプライトに Collider をつけた上で、

public class Player : MonoBehaviour
{
    void OnDrag(Vector2 delta)
    {
        Vector2 mousePoint = UICamera.lastTouchPosition;
        Vector2 worldPoint = UICamera.currentCamera.ScreenToWorldPoint(mousePoint);
        
        transform.position = new Vector3(worldPoint.x, worldPoint.y, transform.position.z);
    }
}

または

public class Player : MonoBehaviour
{
    void OnDrag(Vector2 delta)
    {
        Vector2 mousePoint = UICamera.lastTouchPosition;
        Vector2 worldPoint = UICamera.currentCamera.ScreenToWorldPoint(mousePoint);
        
        // 普通は毎回 Find() しない
        transform.localPosition = GameObject.Find("UI Root (2D)").transform.InverseTransformPoint(new Vector3(worldPoint.x, worldPoint.y, 0));
    }
}

などですね。

引数の delta はスクリーン座標上での前回のマウス位置との差分(だと思う)なので、UIRoot の Scaling Style を Pixel Perfect にしていない限りはそのままでは使いにくそうですね。


2013/5/9 追記 : UIDragObject について追記しました。

コメント