UG3L13——屏幕坐标转UI相对坐标

RectTransformUtility

RectTransformUtility​ 公共类是一个 RectTransform​ 的辅助类
主要用于进行一些 坐标的转换等等操作
其中对于我们目前来说 最重要的函数是 将屏幕空间上的点,转换成UI本地坐标下的点

将屏幕坐标转换为UI本地坐标系下的点

RectTransformUtility.ScreenPointToLocalPointInRectangle()

  • 参数一:相对父对象的坐标系(需要RectTransform类型,且一定是自己的父对象,否则转换可能出现偏差!
  • 参数二:屏幕点(要转换的相对于屏幕坐标系的点,使用 PointerEventData​ 的 position​ 会更准确)
  • 参数三:摄像机(需要为UI的摄像机,可以直接用 PointerEventData​ 的 enterEventCamara​)
  • 参数四:最终得到的点(Vector2​ 类型,使用 out​ 关键字,需要在使用该函数前就声明好,转换完成后该变量就会转载转换好的点)

一般配合拖拽事件使用,效果远比 位置增加拖拽的变化量 更好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using UnityEngine;
using UnityEngine.EventSystems;

public class Lesson20 : MonoBehaviour, IDragHandler
{
public void OnDrag(PointerEventData eventData)
{
Vector2 nowPos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform.parent as RectTransform,
eventData.position,
eventData.enterEventCamera,
out nowPos);
this.transform.localPosition = nowPos;
}
}