Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
使用 Area2D¶
前言¶
Godot提供了許多碰撞物件來提供碰撞偵測和回應. 試圖決定為你的專案使用哪一個可能會讓人感到困惑. 如果你瞭解它們各自的工作原理以及它們的優點和缺點, 你就可以避免問題並簡化開發. 在本教學中, 我們將查看 Area2D 節點, 並展示一些如何使用它的例子.
備註
本文假設你熟悉 Godot 中的各種物理體,否則請先閱讀 物理介紹 。
什麼是區域?¶
Area2D定義了二維空間的區域. 在這個空間中, 您可以偵測到其他 CollisionObject2D 節點的重疊, 進入和退出. 區域(Area)還允許覆蓋本地物理屬性. 我們將在下面討論這些功能中的每一個.
Area 的屬性¶
區域有許多屬性可用於自訂它們的行為.
前八個屬性用於配置區域的物理覆蓋行為. 我們將在下面一節中介紹如何使用這些內容.
Monitoring 和 Monitorable 用於啟用和禁用該區域偵測.
音訊匯流排 (Audio Bus) 部分, 允許重寫該區域內的音訊, 例如當玩家移動時的音訊效果.
請注意,Area2D擴充了 CollisionObject2D, 所以它也提供了從該類繼承的屬性, 例如 input_pickable
.
重疊偵測¶
也許Area2D節點最常見的用途是用於觸碰和重疊偵測. 當需要知道兩個物體已經觸碰, 但不需要物理碰撞時, 可以使用一個區域來通知.
例如, 要做一個硬幣讓玩家去撿. 硬幣並不是一個實心的物體, 玩家不能站在上面, 也不能推它, 只是想讓它在玩家觸碰它的時候消失.
這是硬幣節點的設定:
為了偵測重疊, 我們將在Area2d上連接相應的訊號, 使用哪個訊號取決於玩家的節點型別. 如果玩家是另一個區域(Area2d), 就使用 area_entered
. 然而假設玩家是一個 KinematicBody2D
(因此也是一個 CollisionObject2D
型別), 將連接 body_entered
訊號.
備註
如果熟悉使用訊號, 請參閱 繫結訊號 的介紹.
extends Area2D
func _on_coin_body_entered(body):
queue_free()
using Godot;
public partial class Coin : Area2D
{
private void OnCoinBodyEntered(PhysicsBody2D body)
{
QueueFree();
}
}
現在我們的遊戲角色可以收集硬幣了!
其他一些使用實例:
區域對於子彈和其他彈丸物體來說是非常好用, 它可以擊中並造成傷害, 但不需要其他物理效果, 如彈跳.
用敵人周圍的一個大圓圈區域設定為 "探測" 半徑, 當玩家在該區域外時, 敵人就無法 "看到" 玩家.
安保攝像頭 - 在有多個攝像頭的大型關卡中, 在每個攝像頭上附加區域(area), 並在玩家進入時啟動它們.
遊戲中使用 Area2D 的範例請參閱 您的第一個 2D 遊戲。
區域影響¶
區域節點的第二個主要用途是改變物理效果。預設情況下,區域不會這樣做,但你可以用 空間覆蓋(Space Override) 屬性啟用這個功能。當區域重疊時,它們會按照 優先順序(Priority) 的順序進行處理(優先順序較高的區域會被優先處理)。覆蓋有四個選項:
合併(Combine) - 該區域將其數值加到目前已計算的數值上.
替換(Replace) - 該區域替換物理屬性, 低優先順序區域被忽略.
合併-替換 (Combine-Replace) - 該區域將其重力/阻尼值加到目前為止計算出的所有數值上(按優先順序), 忽略任何較低優先順序的區域.
替換-合併 (Replace-Combine) - 該區域替換了目前為止計算的所有重力或阻尼, 但繼續計算其餘區域.
使用這些屬性, 可以建立具有多個重疊區域的複雜行為.
可以重寫的物理屬性有:
重力(Gravity) - 區域內的重力強度.
重力方向 (Gravity Direction) - 此向量不需要正規化。
線性阻尼 (Linear Damp) - 物體停止移動的速度-每秒損失的線速度.
角度阻尼 (Angular Damp) - 物體停止旋轉的速度-每秒損失的角速度.
重力點¶
重力點 (Gravity Point) 屬性允許您建立一個 "吸引器" . 區域中的重力將按 重力向量 (Gravity Vec) 屬性給出的點進行計算. 值是相對於Area2D而言的, 因此例如使用 (0, 0)
將吸引物件到區域中心.
範例¶
以下所附中的範例專案包含三個區域, 它們說明了物理重寫.
您可以在此處下載專案:area_2d_starter.zip