【Unity3D】获取鼠标在三维空间(世界坐标系)的位置

路过的大神,如有发现不足,还望批评指正,只为学习和知识分享!
前言:
  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);

另:屏幕坐标系下鼠标准确位置: 获取鼠标在屏幕的准确点击位置
posted @ 2018-06-28 16:44  IT_yanghui  阅读(12141)  评论(0编辑  收藏  举报