Area2Dの使用

はじめに

Godotは、衝突の検出と応答の両方を提供する多数のコリジョンオブジェクトを提供します。プロジェクトに使用するものを決定しようとすると、混乱する可能性があります。問題のそれぞれがどのように機能し、その長所と短所が何であるかを理解すれば、問題を回避して開発を簡素化できます。このチュートリアルでは、Area2D ノードを見て、その使用方法の例をいくつか示します。

注釈

このドキュメントは、あなたがGodotのさまざまな物理ボディに精通していることを前提としています。最初に 物理の紹介 をお読みください。

Areaとは何ですか?

Area2Dは、2D空間の領域を定義します。このスペースでは、他の CollisionObject2D ノードが進入、オーバラップ、および退出することを検出できます。Areaでは、ローカルの物理プロパティをオーバーライドすることもできます。これらの各機能を以下で説明します。

Areaのプロパティ

Areaには、動作をカスタマイズするために使用できる多くのプロパティがあります。

../../_images/area2d_properties.png

最初の8つのプロパティは、Areaの物理に対するオーバーライド動作を構成するために使用されます。これらの使用方法については、以下のセクションで説明します。

*Monitoring*(監視)および *Monitorable*(監視可能)は、Areaを有効または無効にするために使用されます。

"Collision"セクションでは、Areaのコリジョンレイヤーとマスクを設定します。

"Audio Bus"セクションでは、たとえばプレイヤーが移動するときにオーディオ効果を適用するために、Area内のオーディオをオーバーライドできます。

Area2Dは CollisionObject2D を拡張するため、input_pickable など、そのクラスから継承されたプロパティも提供することに注意してください。

オーバーラップ検出

おそらく、Area2Dノードの最も一般的な使用方法は、接触とオーバーラップの検出です。 2つのオブジェクトが触れたが、物理的な衝突は必要ないことを知る必要がある場合、Areaを使用して連絡先に通知できます。

たとえば、プレイヤーが受け取るコインを作っているとしましょう。 コインは堅固なオブジェクトではありません - プレイヤーはそれの上に立ったり押したりすることはできません - プレイヤーが触れたときにコインが消えるようにしたいだけです。

コインのノード設定は次のとおりです:

../../_images/area2d_coin_nodes.png

オーバーラップを検出するために、Area2dに適切なシグナルを接続します。 使用するシグナルは、プレイヤーのノードタイプによって異なります。プレイヤーが別のAreaである場合、area_entered を使用します。ただし、プレイヤーが KinematicBody2D``(したがって ``CollisionObject2D型)であると仮定して、body_entered シグナルを接続します。

注釈

シグナルの使用に慣れていない場合は、概要について シグナル を参照してください。

extends Area2D

func _on_Coin_body_entered(body):
    queue_free()
public class Coin : Area2D
{

    public void OnCoinBodyEntered(PhysicsBody2D body)
    {
        QueueFree();
    }
}

今、私たちのプレイヤーは、コインを収集することができます!

別の使用例:

  • Areaは、弾丸やその他の発射物が命中してダメージを与える場合に最適ですが、反発などの物理は必要ありません。
  • 敵の周囲の大きな円形エリアを使用して、その"detect"(検出)半径を定義します。 プレイヤーがエリアの外にいるとき、敵はそれを「見る」ことができません。
  • 「セキュリティカメラ」- 複数のカメラがある大規模なレベルでは、各カメラにAreaを取り付けて、プレイヤーが入るときにそれらをアクティブにします。

ゲームでArea2Dを使用する例については、最初のゲーム を参照してください。

Areaの影響

Areaノードの2番目の主な用途は、物理を変更することです。 デフォルトでは、エリアはこれを行いませんが、Space Override プロパティでこれを有効にできます。 Areaが重複する場合、それらはPriority順で処理されます(優先度の高いAreaが最初に処理されます)。 オーバーライドには4つのオプションがあります:

  • Combine - Areaは、これまでに計算された値にその値を加算します。
  • Replace - Areaは物理特性を置換し、優先度の低いAreaは無視されます。
  • Combine-Replace - Areaは、これまでに計算されたものに優先度の高い値を加算し、優先度の低いAreaを無視します。
  • Replace-Combine - このAreaは、これまでに計算された重力/減衰を置き換えますが、残りのAreaの計算を続けます。

これらのプロパティを使用すると、複数の重なり合う領域を持つ非常に複雑な動作を作成できます。

オーバーライドできる物理特性は次のとおりです:

  • Gravity - Area内の重力の強さ。
  • Gravity Vec - 重力の方向。このベクトルは正規化する必要はありません。
  • Linear Damp - オブジェクトの減速量 - 毎秒 linear velocity からこの値が失われます。
  • Angular Damp - How quickly objects stop spinning - angular velocity lost per second.

ポイント重力

Gravity Point プロパティを使用すると、「アトラクター」を作成できます。 エリアの重力は、Gravity Vec プロパティで指定されたポイントに向かって計算されます。 値はArea2Dに相対的であるため、たとえば (0, 0) を使用すると、オブジェクトが領域の中心に引き付けられます。

以下に添付されているサンプルプロジェクトには、物理オーバーライドを示す3つの領域があります。

../../_images/area2d_override.gif

このプロジェクトはこちらからダウンロードできます: using_area_2d.zip <files/using_area_2d.zip>