【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);
另:屏幕坐标系下鼠标准确位置: 获取鼠标在屏幕的准确点击位置
好好把握每一次学习的机会,你会发现自己时刻在成长!
不想放弃梦想,所以一直坚持,虽无人鼓励,但要活出自己!