跳到主要內容

[Unity_Learning] ScreenToWorldPoint如何使用


前言:

在線與球專案中,為了避免讓球跑出視線外,我加入了4個box collider,分別將他們座標設定對應於攝影機中的上下左右,為了達到響應式的設計,我將讀取螢幕的長寬,並且轉換成遊戲內的世界座標。

首先,需要幾個背景知識:
  1. Unity中有幾個座標空間,世界空間(World Space)、螢幕空間(Screen Space)、Viewport,各自獨立。
  2. 他們可以透過Function或叫Unity Scripting Api進行轉換。例如螢幕空間轉換到世界空間:ScreenToWorldPoint(螢幕空間) {get :世界}。
  3. 世界座標為在遊戲畫面中,所建立的物件座標 ;螢幕上的座標為解析度,單位為像素。
    例如1K畫質,畫面座標為左下(0,0)~右上(1024,768),例如上圖紅線 ;Viewport為將螢幕空間標準化轉換成最大到(1,1)的空間,因此無論畫質多高,最大都是(1,1)。
  4. 上圖中,白色外框為攝影機的邊界,我將攝影機中央設定為世界座標(0,0)位置。黃球與紅球為遊戲物件請忽略。
  5. 重要:因為我將攝影機中央設定為世界空間(0,0,0)位置,因此螢幕空間(0,0,0)不等於世界空間(0,0,0)。
  6. 重要:此示範專案是2D,攝影機的投影是正投影而非透視,若為透視會發生意料之外的情形。


實作:


  • 1~4 :設定邊界位置座標。
  • 5~8:設定邊界寬高,符合螢幕大小。

結果:



參考資料:


留言