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

image01.jpg

 
Canvas 的 UIScaleMode 我們設定成 Scale With Screen Size

image02.jpg

 
解析度設定為 720 x 1280,所以不管手機解析度如何,Canvas 都會自動換算出一塊 720 x 1280 的區塊出來,其它多出來的畫面會以黑邊顯示

image03.jpg

 
 
取得目前滑鼠在畫面上的位置
 
// 目前滑鼠在畫面上位置, 手機觸碰螢幕同樣適用
Vector2 v2 = Input.mousePosition;
 
但是該方法取得的座標位置,是看螢幕解析度的,比較適用於 PC 可調整並固定解析度的視窗上。
若想要在手機螢幕上使用,就不太推薦了,畢竟大家手機螢幕解析度都不一樣。
 
 
將目前滑鼠的位置轉換為比例,轉換成比例後再依照解析度換算為座標,就不用擔心解析度不同的問題了,但是該作法是將畫面左下角當作起始點
 
// 轉成 2D 座標比例 - 左下為起始點
Vector2 v2 = Camera.main.ScreenToViewportPoint( Input.mousePosition );
 
座標比例的意思就是該位置在手機畫面上的比例為多少,比例值為 0 ~ 1。
下面為以左下為起始點的座標比例圖示

image04.jpg


 
將比例換算為座標,但是該作法是將畫面左下角當作起始點
 
// 因為解析度設定為 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) 的意思

image05.jpg

 
將比例換算為座標,但是該作法是將畫面左上角當作起始點
 
// 因為解析度設定為 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) 的意思

image06.jpg

 
 
將比例換算為座標,但是該作法是將畫面正中間當作起始點
 
// 因為解析度設定為 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) 的意思

image07.jpg

 
 
若是不想使用 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 );
 
 
 
 
arrow
arrow

    岳 發表在 痞客邦 留言(0) 人氣()