ゲーム開発の物理学におけるArea2Dの使用

ゲーム開発の物理学におけるArea2Dの使用

前書き

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

注意

このドキュメントは、Godotのさまざまな物理的機関に精通していることを前提としています。最初に物理学の紹介を読んでください。

面積は?

Area2Dは、2D空間の領域を定義します。このスペースでは、他のCollisionObject2Dノードがオーバーラップし、出入りすることを検出できます。エリアでは、ローカルの物理属性を上書きすることもできます。これらの機能については、以下で説明します。

エリア属性

エリアには、動作をカスタマイズするために使用できる多くの属性があります。

../../_images/area2d_properties.png

最初の8つの属性は、エリアの物理的な置換動作を構成するために使用されます。次のセクションでは、それらの使用方法について説明します。

監視と監視は、領域を有効または無効にするために使用されます。

[衝突]セクションでは、領域の衝突レイヤーとマスクを構成できます。

「オーディオバス」セクションでは、この領域にオーディオをオーバーレイできます。たとえば、プレーヤーが動いたときにオーディオエフェクトを適用できます。

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

オーバーラップ検出

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

たとえば、プレーヤーのためにコインを選んでいるとします。コインは固い物体ではなく、プレイヤーは立ったり押したりすることはできません。プレイヤーがコインに触れたときにのみコインが消えるようにします。

これはコインのノード設定です:

../../_images/area2d_coin_nodes.png

オーバーラップを検出するために、適切な信号をArea2dに接続します。どの信号が使用されるかは、プレーヤーのノードタイプによって異なります。プレイヤーが別のエリアにいる場合は、area_enteredを使用してください。ただし、プレーヤーがKinematicBody2D(したがって、CollisionObject2Dタイプ)であるとすると、body_enteredシグナルを接続します。

注意

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

public class Coin : Area2D
{
    
    

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

これで、プレイヤーはコインを集めることができます!

その他の使用例:

  • これらの領域は、弾丸やその他の発射物が命中して損傷を与えるのに理想的ですが、跳ね返りなどの他の物理的プロセスは必要ありません。
  • 敵の周りのより大きな円形領域を使用して、敵の「検出」半径を定義します。プレイヤーがエリアの外にいるとき、敵はそれを「見る」ことができません。
  • 「防犯カメラ」-複数のカメラがある大規模なレベルでは、各カメラにエリアを取り付け、プレーヤーが入るときにそれらをアクティブにします。

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

地域の影響

リージョナルノードの2番目の主な用途は、物理を変更することです。デフォルトでは、この領域はこれを行いませんが、「スペースオーバーレイ」属性を使用して有効にすることができます。リージョンが重複する場合、優先度の高い順に処理されます(優先度の高いリージョンが最初に処理されます)。4つの代替オプションがあります。

  • 統合-エリアは、これまでに計算された値にその値を追加します。
  • 置換-エリアの物理属性を置換します。優先度の低いエリアは無視されます。
  • 複合置換-この領域は、優先度の低い領域を無視して、これまでに計算されたすべてのものに重力/減衰値を(優先度の順に)追加します。
  • 置換-結合-この領域を置換して、これまでに計算されたすべての重力/減衰を置換しますが、残りの領域の計算は続行します。

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

オーバーライドできる物理プロパティは次のとおりです。

  • 重力-その領域の重力の強さ。
  • 重力速度-重力の方向。このベクトルは正規化する必要はありません。
  • 線形減衰-オブジェクトの移動が停止する速度-1秒あたりに失われる線形速度。
  • 角減衰(オブジェクトの回転が停止する速度)-1秒あたりに失われる角速度。

点重力

重力点属性を使用すると、「プライマー」を作成できます。エリアの重力は、GravityVecプロパティで指定されたポイントに基づいて計算されます。値はArea2Dを基準にしているため、たとえば(0,0)を使用すると、オブジェクトがエリアの中心に引き付けられます。

以下に添付されているサンプルプロジェクトには、物理​​的なカバレッジを示す3つの領域が含まれています。

ここに画像の説明を挿入

ここからプロジェクトをダウンロードできます:using_area_2d.zip

おすすめ

転載: blog.csdn.net/qq_44273429/article/details/111312144