【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);

另:屏幕座標系下鼠標準確位置: 獲取鼠標在屏幕的準確點擊位置
相關文章
相關標籤/搜索