想要獲取鼠標在屏幕的准確點擊位置,千萬不要胡亂寫,什么轉化坐標系,什么Ray射線檢測都是浮雲。
1,轉化坐標系只是相對而言,並不能准確實現當前鼠標點擊在屏幕的位置;
2,Ray檢測,hit是需要碰撞的,沒碰撞,獲取的是什么??(0,0,0)。
所以,請看如下正解。
第一種:
我用坐標系轉化時發現值並沒有什么變化,網上亂七八糟的都有。
其實很簡單,Input.mousePosition本身就是屏幕坐標(二維),
不能直接使用是因為,屏幕空間以像素定義。屏幕的左下為(0,0);右上是(pixelWidth,pixelHeight),
或者說以屏幕的左下角為(0,0)點,右上角為(Screen.width,Screen.height)
而屏幕的基准點在屏幕中心(Screen.width/2,Screen.height/2),需要減掉二分之一坐標值,也就是減去二分之一屏幕的寬、高。
將基准點放置屏幕的左下角,即基准點為(0,0).
此時m_panel的屏幕坐標就對應到tranPos的x、y值。
Transform(RectTransform) m_panel;
float X = Input.mousePosition.x - Screen.width / 2f;
float Y = Input.mousePosition.y - Screen.height / 2f;
Vector2 tranPos = new Vector2(X,Y);
m_panel.localPosition = tranPos;
注意:需要考慮m_panel的錨點,舉例說明:可以這么說,錨點對應坐標中心點。

第二種:使用 RectTransformUtility.ScreenPointToLocalPointInRectangle 方法。
我這里的UICamera是單獨檢測UI層的相機,可以是MainCamera,如果沒有攝像機(即Canvas --Overlay),則相機為null。
public Vector2 CurrMousePosition(Transform thisTrans)
{
Vector2 vecMouse;
RectTransform parentRectTrans = thisTrans.parent.GetComponent<RectTransform>();
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTrans, Input.mousePosition, UICamera, out vecMouse);
return vecMouse;
}
另,獲取鼠標的世界坐標: 鼠標在世界坐標下的位置,鼠標位置從屏幕坐標轉化為世界坐標
