1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RectTransformUtility.ScreenPointToLocalPointInRectangleではまった

Posted at

やりたいこと

Canvas-RenderMode-Screen Space-Camera

UIをドラッグしたい

はまった点

http://appleorbit.hatenablog.com/entry/2015/10/23/000403
を参考に Selectable ,IDragHandlerを追加して実装
以下の部分がドラッグの部分

EyeStone.cs
   public void OnDrag(PointerEventData eventData)
        {
            Vector2 localPos = Vector2.zero;
            var ii =RectTransformUtility.ScreenPointToLocalPointInRectangle(
               GetComponent<RectTransform>(),
                eventData.position,
                Camera.main,
                out localPos
            );
           _transform.localPosition = localPos;
        }

これで動かしてみると...
RTU.gif
すっごい荒ぶる...

## 解決策

以下のように変更したところ正常に動くようになりました

EyeStone.cs
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;
        }

RTU_Right.gif

イェイ!

原因

公式のドキュメントを再度見てみたところこのようにありました

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?