Library)を使わないのですかなぜGodotは例外処理を使わないのですか?GodotがRTTI(実行時型情報)を強制しないのはなぜですか?GodotがユーザーにDoD(データ指向設計)の実装を強制しないのはなぜですか?Godotの開発をサポートしたり、貢献したりするにはどうすればいいですか?誰がGodotで働いていますか。source物理の紹介¶ゲーム開発では、多くの場合、ゲーム内の2つのオブジェクトが交差または接触するタイミングを知る必要があります。これは衝突検出として知られています。衝突が検出された場合、通常は何かが発生します。これは衝突応答として知られています。Godotは、衝突の検出と応答の両方を提供するために、2Dおよび3Dで多数のコリジョン(衝突)オブジェクトを提供します。プロジェクトに使用するものを決定しようとすると、混乱する可能性があります。それぞれがどのように機能し、その長所と短所が何であるかを理解すれば、問題を回避して開発を簡素化できます。注釈このドキュメントの例では、2Dオブジェクトを使用します。すべての2D物理オブジェクトとコリジョン形状は3Dでもまったく同等であり、ほとんどの場合、ほぼ同じように機能します。オブジェクトの重なり合いを検出し、物体が出入りするときにシグナルを発することができます。使用して、定義された領域で重力や減衰などの物理特性をオーバーライドすることもできます。拡張します:StaticBody2D静的ボディとは、物理エンジンによって動かされないものです。コリジョン検出に参加しますが、衝突に応じて移動しません。これらは、環境の一部であるオブジェクトや動的な動作を必要としないオブジェクトに最もよく使用されます。RigidBody2Dこれは、シミュレートされた2D物理を実装するノードです。制御するのではなく、それに力(重力、衝撃など)を適用し、物理エンジンが結果の動きを計算します。:ref:`リジッドボディの使用に関する詳細をお読みください。`KinematicBody2Dコリジョン検出を提供しますが、物理は提供しません。すべての移動および衝突応答はコードで実装する必要があります。オブジェクトを子として保持できます。これらの形状は、オブジェクトのコリジョン境界を定義し、他のオブジェクトとの接触を検出するために使用されます。オブジェクトに割り当てる必要があります。オブジェクトの子として追加することです。これらのノードを使用すると、エディタのワークスペースでシェイプを直接描画できます。重要エディタでコリジョン形状をスケーリングしないように注意してください。スケールハンドルではなく、常にサイズハンドルを使用する必要があります。シェイプをスケーリングすると、予期しない衝突が発生する場合があります。物理エンジンは、パフォーマンスを向上させるために複数のスレッドを生成する場合があるため、物理を処理するために最大でフルフレームを使用できます。ボディの状態変数の値は、現在のフレームに対して正確でない場合があります。コールバックで実行する必要があります。強力ですが、誤解されることが多い衝突機能の1つは、コリジョンレイヤーシステムです。このシステムにより、さまざまなオブジェクト間の複雑な相互作用を構築できます。相互作用できる20の異なる物理層があります。表示されるレイヤーを記述します。するレイヤーを記述します。オブジェクトがマスクレイヤーのいずれかにない場合、ボディはそれを無視します。これらのプロパティは、コードを介して、またはインスペクタで編集して構成できます。各レイヤーの使用目的を追跡するのは難しい場合があるため、使用しているレイヤーに名前を付けると便利な場合があります。名前を割り当てることができます。例:ゲームには、Walls、Player、Enemy、およびCoinの4つのノードタイプがあります。PlayerとEnemyの両方がWallsと衝突するはずです。PlayerノードはEnemyとCoinの両方との衝突を検出する必要がありますが、EnemyとCoinは互いに無視する必要があります。プロパティを使用して各ノードタイプをそれぞれのレイヤーに配置します。次に、相互作用するレイヤーを選択して、各ノードの"Mask"プロパティを設定します。オブジェクトの重なり合いを検出し、物体が出入りするときにsシグナルを発します。エリアは、定義されたエリアで重力や減衰などの物理特性をオーバーライドするためにも使用できます。3つの用途があります:特定の領域での物理パラメータ(重力など)のオーバーライド。他のボディが領域に出入りするとき、または現在どのボディが領域にあるかを検出します。他の領域のオーバーラップを確認します。デフォルトでは、エリアはマウスとタッチスクリーンの入力も受け取ります。静的(Static)ボディとは、物理エンジンによって動かされないものです。コリジョン検出に参加しますが、衝突に応じて移動しません。プロパティを使用して、衝突している物体に動きや回転をあたかも移動しているかのように伝えることができます。ノードは、環境の一部であるか、動的な動作を必要としないオブジェクトに最もよく使用されます。使用例:プラットフォーム(移動プラットフォームを含む)コンベヤベルト壁やその他の障害物RigidBody2D¶これは、シミュレートされた2D物理を実装するノードです。制御することはできません。代わりに、それに力を適用し、物理エンジンは、他のボディとの衝突、跳ね返り、回転などの衝突応答を含む結果の動きを計算します。ボディの動作を変更できます。入力することによっても影響を受けます。リジッドボディが静止していて、しばらく動かない場合、スリープ状態になります。眠っている体は静的な体のように動作し、その力は物理エンジンによって計算されません。衝突またはコードを介して力が加えられると、ボディが起動します。ボディは物理的なオブジェクトとして動作します。それは他のボディと衝突し、それに加えられた力に反応します。これがデフォルトのモードです。ように動作し、移動しません。"Rigid"モードに似ていますが、ボディは回転できません。ように動作し、コードによって移動する必要があります。RigidBody2Dを使用する¶リジッドボディを使用する利点の1つは、コードを記述せずに多くの動作を「無料」で行えることです。Birds」スタイルのゲームを作成している場合、RigidBody2Dを作成してプロパティを調整するだけで済みます。キング、落下、および跳ね返りは、物理エンジンによって自動的に計算されます。position、linear_velocity、またはその他の物理プロパティを変更すると、予期しない動作が発生する可能性があります。コールバックを使用する必要があります。これにより、プロパティを安全に変更し、物理エンジンと同期させることができます。torque)をボディに適用し、物理エンジンに結果の動きを計算させることに注意してください。関数は呼び出されません。プロパティを無効にすることで、ボディを起こしたままにする必要があります。これはパフォーマンスに悪影響を及ぼす可能性があることに注意してください。接触のレポート¶デフォルトでは、リジッドボディは接触を追跡しません。これは、シーンに多くのボディがある場合、膨大な量のメモリが必要になる可能性があるためです。プロパティをゼロ以外の値に設定します。関連する関数を介して取得できます。プロパティを使用して有効にできます。ボディは、他のボディとの衝突を検出しますが、重力や摩擦などの物理特性の影響を受けません。代わりに、ユーザーがコードを介して制御する必要があります。物理エンジンはキネマティックボディを移動しません。設定しないでください。メソッドを使用します。これらのメソッドは、指定されたベクトルに沿ってボディを移動し、別のボディとの衝突が検出されるとすぐに停止します。オブジェクトを返します。このオブジェクトには、コリジョンと衝突するボディに関する情報が含まれます。この情報を使用して、応答を判別できます。}}move_and_slide¶スライディングは一般的な衝突応答です。トップダウンゲームで壁に沿って移動するプレイヤー、またはプラットフォーマーで坂を上下に走るプレイヤーを想像してください。多くのコードを書かずにスライド移動を実装する便利な方法を提供します。