Unity UGUI獲取鼠標在屏幕的准確點擊位置


想要獲取鼠標在屏幕的准確點擊位置,千萬不要胡亂寫,什么轉化坐標系,什么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;
}

 

另,獲取鼠標的世界坐標: 鼠標在世界坐標下的位置鼠標位置從屏幕坐標轉化為世界坐標

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM