路過的大神,如有發現不足,還望批評指正,只為學習和知識分享!
前言:
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);
另:屏幕坐標系下鼠標准確位置: 獲取鼠標在屏幕的准確點擊位置