[Unity]NGUIのOnDragイベントを使う
NGUI のスプライトをドラッグで動かせるようにしたときのメモです。
(2013/5/9 追記 : 動かすだけなら UIDragObject だけで済みます。こちらはコーディング不要です。)
スプライトに Collider をつけた上で、
または
などですね。
引数の delta はスクリーン座標上での前回のマウス位置との差分(だと思う)なので、UIRoot の Scaling Style を Pixel Perfect にしていない限りはそのままでは使いにくそうですね。
2013/5/9 追記 : UIDragObject について追記しました。
(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 について追記しました。
コメント
コメントを投稿