やりたいこと
Canvas-RenderMode-Screen Space-Camera
で
UIをドラッグしたい
はまった点
http://appleorbit.hatenablog.com/entry/2015/10/23/000403
を参考に Selectable ,IDragHandlerを追加して実装
以下の部分がドラッグの部分
public void OnDrag(PointerEventData eventData)
{
Vector2 localPos = Vector2.zero;
var ii =RectTransformUtility.ScreenPointToLocalPointInRectangle(
GetComponent<RectTransform>(),
eventData.position,
Camera.main,
out localPos
);
_transform.localPosition = localPos;
}
## 解決策
以下のように変更したところ正常に動くようになりました
public void OnDrag(PointerEventData eventData)
{
Vector2 localPos = Vector2.zero;
var ii =RectTransformUtility.ScreenPointToLocalPointInRectangle(
//親から取ってくる
transform .parent .GetComponent<RectTransform>(),
eventData.position,
Camera.main,
out localPos
);
_transform.localPosition = localPos;
}
イェイ!
原因
公式のドキュメントを再度見てみたところこのようにありました
Transform a screen space point to a position in the local space of a RectTransform that is on the plane of its rectangle.
これ意味合い的にはあるRectTransfom内におけるlocalPositionを返すって意味だと思うので、範囲とするRectTransform自体を動かすDragでは計算的におかしいのか、
もしくは、対象とするRectTransform外における計算値はおかしくなるのかもしれません。
##付録
ソースも上げておきます
https://gist.github.com/OhkuboSGMS/81e409393a67d114ed24347040e8de3d