Unity2D坐标转换,屏幕点击坐标转为2D物体本地坐标

200 阅读1分钟

这里给出比较常用的函数 RectTransformUtility.ScreenPointToLocalPointInRectangle()

其中有四个入参,分别是:

  1. 要转换物体本地坐标系的父对象:它是一个RectTransform对象,可以由 Transform 转换得到。
  2. Position:表示屏幕上的坐标点,它是一个Vector2对象,通常以左下角为屏幕原点。
  3. Camera:这是用于渲染的相机对象。这里使用Camera.main获取主相机,作为一个参数传递给函数。
  4. out Value:输出参数,用于存储转换后的本地坐标点。out关键字表明该参数将被函数修改,并且作为输出返回。

这个方法常被用来制作2D场景中,实际画布与组件有透视关系,以及屏幕坐标系画布坐标系不重合的情况。在许多2D游戏的远近景物体的交互点击也经常使用。

image.png

以下是代码示例:

         // 获取当前屏幕位置,转换成CanvasUI上的位置 <!>
            Vector2 canvaspoint;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(
                this.transform.parent as RectTransform,
                Input.mousePosition,
                Camera.main,
                out canvaspoint
                );
         // 随后可以使用 canvaspoint 做具体业务功能(以在 canvaspoint 位置弹对话框为例)
            Talkbox.SpeakToPlayer(canvaspoint, InitialBoxSize, "something");