RectTransformUtility.Sc r e n P o i ntTolocal Point InRectangle 의

4413 단어 Unity

하고 싶은 일


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;
        }
이걸로 시운전을 해보면...

무지막지하다...

해결책


아래와 같이 변경한 후 정상적으로 운행한다
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;
        }

예!

까닭


정식 문서를 다시 보니 이렇다
Transform a screen space point to a position in the local space of a RectTransform that is on the plane of its rectangle.
그런 의미에서 어떤 RectTransfom 내의local Position으로 되돌아간다는 뜻이라고 생각해요. 그래서 범위로서의 RectTransform 자체를 구동하는 Drag에서 계산이 이상한가요?
또는 객체의 RectTransform 이외에 계산된 값이 이상해질 수 있습니다.

부록.


소스도 드릴게요.
https://gist.github.com/OhkuboSGMS/81e409393a67d114ed24347040e8de3d

좋은 웹페이지 즐겨찾기