路过的大神,如有发现不足,还望批评指正,只为学习和知识分享! 前言: transform.position: 获取的是世界坐标(以场景中心(0,0,0)的位置开始计算,单位长度也都是一样的) 物体在世界坐标,无论怎样的UI,怎样的层级关系,代码里输出Debug.log(go.transform.position),输出的总是相对于场景中心(0,0)的距离, 也是获取世界坐标的方法。 鼠标:获取的是2维坐标 ,鼠标位置Input.mousePosition获取的是屏幕坐标。 屏幕坐标:屏幕空间以像素定义,屏幕左下为(0,0),右上是(pixelWidth,pixelHeight),Z的位置是以世界单位衡量的到相机的距离。 或者说:以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。
逻辑分析: 首先,确定(获取)世界坐标系,将其转化为屏幕坐标系;(需要z轴数据) 其次,把鼠标位置转成三维的屏幕坐标,将拿到的z轴数据赋给鼠标坐标的z轴,就是物体屏幕坐标的z轴,使鼠标坐标与目标对象坐标处于同一层面上; 最后,将新的鼠标三维屏幕坐标转化为世界坐标系下的鼠标坐标。 搞定。 代码如下: Vector3 screenPos = Camera.main.WorldToScreenPoint(transform.position); Vector3 mousePosOnScreen = Input.mousePosition; mousePosOnScreen.z = screenPos.z; Vector3 mousePosInWorld = Camera.main.ScreenToWorldPoint(mousePosOnScreen); 另:屏幕坐标系下鼠标准确位置: