Unity 偵測器實作
❀ 前言 ❀
今天實作內容:
在玩家腳底新增偵測器決定該角色是否離開地板
也可運用在牆跳偵測器
注意,此教程內容為 Unity2D 在 Unity3D 中有一些函式會不符
請小心服用
❀ 正題 ❀
主畫面:物件設定
首先,要先創建一個空物件,我命名為:GroundDetector
把它拉到 Player 物件底下(才會跟著玩家動)
並為他新增一個腳本,這邊我命名為:PlayerGroundDetector
創建空物件

拉到 Player 物件底下

寫程式:PlayerGroundDetector.cs
Key:Physics2D.OverlapCircleNonAlloc()
本次內容最重要的函示就是 OverlapCircleNonAlloc()
用來做一個圓型的偵測範圍。
它裡面需要的參數如下
- point:圓心位置
- radius:圓型半徑
- results:一個 Array,讓函式告訴你他偵測到的所有人
- layerMask:判斷哪個層級為有效層級
point
無庸置疑就是空物件的座標,因此不須宣告 radius
,是我們會比較常更改的,因此宣告時使用 [SerilizeField]
提示詞 results
,只需腳本中知道就好(如非你想讓他傳給其他人),也不是我們會去改動的,因此使用 private 即可 layerMask
,我有使用 [SerilizeField]
,更方便在修改層級時,判斷他要偵測的層級
有了上述邏輯,就可以開始寫程式了
1 | public class PlayerGroundDetector : MonoBehaviour |
最後一行的 isGrounded
,我設定為 public
,方便其他腳本得知玩家是否落地
而 =>
代表的是 get
也就是唯讀的概念啦~
由於 OverlapCircleNonAlloc()
會回傳一個 int
告訴使用者他偵測到幾個人
而我們只需知道是否觸地(偵測數 > 0)即可
若想知道偵測對象,會被裝在colliders
中,因此攻擊判斷也可使用此函式。
OK,再來為了讓我們方便管理這個看不到的東西
這邊要用到 Gizmos,畫出偵測的範圍。
這邊我們使用 Unity 預設函式 OnDrawGizmosSelected()
1 | private void OnDrawGizmosSelected() |
主畫面:函式參數設置

回到主畫面,點擊 GroundDetector 就能看到綠色的圓形了
這裡右邊可以設定半徑大小,與要偵測哪個層級。
下面(Game 視窗)可以點選 Gizmos 使其在運行時可見。
點擊 GroundDetector 按下 F 聚焦 (Focus) 並點選 W (右邊移動工具) 將其移動到玩家腳下
修改 radius
至適當值後,我們就來做最後一件事 -- 設定層級。

點選地板,並選擇 Layer => Add Layer
選個 User Layer,命名為 Ground (或你想要的名字)
點選地板,再次按下 Layer,就會發現 Ground 層級出現啦~
將地板都改為 Ground 層級後,別忘了把 PlayerGroundDetector 的 layerMask 也設定為 Ground
大功告成,熱騰騰的偵測器就能用啦!
❀ 後話 ❀
除了圓形,也有其他形狀
但我太懶了=v=,就等各位自行去研究啦!