这里给出比较常用的函数 RectTransformUtility.ScreenPointToLocalPointInRectangle()
其中有四个入参,分别是:
要转换物体本地坐标系的父对象
:它是一个RectTransform
对象,可以由 Transform 转换得到。Position
:表示屏幕上的坐标点,它是一个Vector2
对象,通常以左下角为屏幕原点。Camera
:这是用于渲染的相机对象。这里使用Camera.main
获取主相机,作为一个参数传递给函数。out Value
:输出参数,用于存储转换后的本地坐标点。out
关键字表明该参数将被函数修改,并且作为输出返回。
这个方法常被用来制作2D场景中,实际画布与组件有透视关系,以及屏幕坐标系
与画布坐标系
不重合的情况。在许多2D游戏的远近景物体的交互点击也经常使用。
以下是代码示例:
// 获取当前屏幕位置,转换成CanvasUI上的位置 <!>
Vector2 canvaspoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
this.transform.parent as RectTransform,
Input.mousePosition,
Camera.main,
out canvaspoint
);
// 随后可以使用 canvaspoint 做具体业务功能(以在 canvaspoint 位置弹对话框为例)
Talkbox.SpeakToPlayer(canvaspoint, InitialBoxSize, "something");