close
在 Unity 中,取得滑鼠點擊的位置是很基本的。
只要呼叫 Input.mousePosition 就能取得目前滑鼠的位置,手機的觸碰點同樣適用。
但是基本上 Input.mousePosition 回傳的位置為目前點擊位置。
比如說,我的手機螢幕解析度為 1920x1080 的話,那我 Input.mousePosition 回傳的值就會是在 (0, 0) ~ (1080, 1920) 之間。
若我的手機螢幕解析度為 960x640,那我 Input.mousePosition 回傳的值就會是在 (0, 0) ~ (640, 960) 之間。
除非是使用 PC 可以直接設定遊戲視窗的解析度,不然不太建議其它設備直接套用 Input.mousePosition 的值,因為大家的解析度可能都不一致。
因此我們在開發手機的時候,是使用比例來換算出目前的點擊位置。
以下為各範例說明:
在開始之前,我先說明我的環境設定。
因為我們是使用攝影機提供的方法來換算座標,所以場景上必須要有攝影機,且 Tag 為 MainCamera
Canvas 的 UIScaleMode 我們設定成 Scale With Screen Size
解析度設定為 720 x 1280,所以不管手機解析度如何,Canvas 都會自動換算出一塊 720 x 1280 的區塊出來,其它多出來的畫面會以黑邊顯示
取得目前滑鼠在畫面上的位置
// 目前滑鼠在畫面上位置, 手機觸碰螢幕同樣適用 Vector2 v2 = Input.mousePosition;
但是該方法取得的座標位置,是看螢幕解析度的,比較適用於 PC 可調整並固定解析度的視窗上。
若想要在手機螢幕上使用,就不太推薦了,畢竟大家手機螢幕解析度都不一樣。
將目前滑鼠的位置轉換為比例,轉換成比例後再依照解析度換算為座標,就不用擔心解析度不同的問題了,但是該作法是將畫面左下角當作起始點
// 轉成 2D 座標比例 - 左下為起始點 Vector2 v2 = Camera.main.ScreenToViewportPoint( Input.mousePosition );
座標比例的意思就是該位置在手機畫面上的比例為多少,比例值為 0 ~ 1。
下面為以左下為起始點的座標比例圖示
將比例換算為座標,但是該作法是將畫面左下角當作起始點
// 因為解析度設定為 720x1280, // 所以 this.width 為 720, this.height 為 1280 // 轉成 2D 座標比例換算 - 左下為起始點 Vector2 v2 = Camera.main.ScreenToViewportPoint( Input.mousePosition ); Vector2 temp = new Vector2( v2.x * this.width, v2.y * this.height );
左下為起始點的意思,就是手機畫面最左下角為原點 (0, 0) 的意思
將比例換算為座標,但是該作法是將畫面左上角當作起始點
// 因為解析度設定為 720x1280, // 所以 this.width 為 720, this.height 為 1280 // 轉成 2D 座標比例換算 - 左上為起始點 Vector2 v2 = Camera.main.ScreenToViewportPoint( Input.mousePosition ); Vector2 newPoint = new Vector2( v2.x, 1.0f - v2.y ); Vector2 temp = new Vector2( newPoint.x * this.width, newPoint.y * this.height );
左上為起始點的意思,就是手機畫面最左上角為原點 (0, 0) 的意思
將比例換算為座標,但是該作法是將畫面正中間當作起始點
// 因為解析度設定為 720x1280, // 所以 this.width 為 720, this.height 為 1280 // 轉成 2D 座標比例換算 - 中間為起始點 Vector2 v2 = Camera.main.ScreenToViewportPoint( Input.mousePosition ); Vector2 newPoint = new Vector2( v2.x - 0.5f, v2.y - 0.5f ); Vector2 temp = new Vector2( newPoint.x * this.width, newPoint.y * this.height );
正中間為起始點的意思,就是手機畫面的正中間為原點 (0, 0) 的意思
若是不想使用 Camera 的方法來換算座標,或者場景中沒有 Camera 的話,也可以自己算出比例
// 因為解析度設定為 720x1280, // 所以 this.width 為 720, this.height 為 1280 // 轉成 2D 座標比例 - 自己計算比例 // 若不用 Camera 內建的來換算比例的話, 可使用該方法 Vector2 v2 = new Vector2( (1.0f / Screen.width) * Input.mousePosition.x, (1.0f / Screen.height) * Input.mousePosition.y );
算出的結果是跟 Camera.main.ScreenToViewportPoint( Input.mousePosition ) 一樣的。
算出 3D 中,目前滑鼠的位置跟方向
// 轉成攝影機射線, // 該方法主要用在 3D 遊戲中, 判斷滑鼠的位置與方向 Ray ray = Camera.main.ScreenPointToRay( Input.mousePosition );
算出 3D 中,目前滑鼠的位置,跟上面方法類似,只是少了方向
// 轉成 3D 座標位置 Vector3 v3 = Camera.main.ScreenToWorldPoint( Input.mousePosition );
文章標籤
全站熱搜