想要獲取滑鼠在螢幕的準確點選位置,千萬不要胡亂寫,什麼轉化座標系,什麼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)
另,獲取滑鼠的世界座標: 滑鼠在世界座標下的位置,滑鼠位置從螢幕座標轉化為世界座標
使用C 在console中獲取滑鼠事件
第一點,使用標頭檔案 要在console裡進行操作,首先先說一下readconsoleinput 函式。msdn的具體解釋如下 來自這個函式主要是用於獲取控制台資訊。其實lpbuffer所返回的資訊中,包括了多個事件,其中有focusevent,keyevent,windowbuffersizeev...
獲取滑鼠位置
clientx 設定或獲取滑鼠指標位置相對於視窗客戶區域的 x 座標,其中客戶區域不包括視窗自身的控制項和滾動條。clienty 設定或獲取滑鼠指標位置相對於視窗客戶區域的 y 座標,其中客戶區域不包括視窗自身的控制項和滾動條。offsetx 設定或獲取滑鼠指標位置相對於觸發事件的物件的 x 座標。...
獲取滑鼠資訊
1.獲取滑鼠雙擊時間間隔 連續兩次滑鼠單擊之間會被處理成雙擊事件的時間間隔 重寫api函式 dllimport user32.dll entrypoint getdoubleclicktime public extern static int getdoubleclicktime 2.獲取游標閃爍的...