物理エンジン


Game Maker Language リファレンス > 組み込み関数 用途別 > 物理エンジン

物理エンジン


物理エンジンについて


物理世界

GameMaker Studio 2で物理的な反応が発生する前に、まず、それらが発生する物理の世界を定義する必要があります。 これを行わないと、GameMaker Studio 2はデフォルトで基本的な衝突関数になり、他のすべての物理関連のコードまたは設定は無視されます。 ルームエディタから物理ワールドを設定できますが、次の関数を使用したコードを使用して同じプロパティを設定することもできます。

GameMaker Studio 2の物理学の世界では、インスタンスは重力や衝突の影響を受けるだけでなく、適用することを選択した力の影響も受けます。適用する適切な力を知ることは、 物理シミュレーション内で正しくインスタンス化されます。 フィクスチャに使用および適用できる力は2つあります。

  • Impulses (インパルス): インパルスは、適用された直後に方向と速度を設定するため、スプリングや弾丸の発射などに最適です
  • Forces (力): 力は既存の速度と方向に作用し、時間の経過とともに変化するため、風や磁石などに最適です
  • Torque (トルク): トルクは、力が加えられた後、インスタンスがその軸の周りを回転し続ける可能性と、インスタンスが回転を停止する速度を決定します。 トルクの追加は、力を使用して動きを追加するのと同じように、段階的なプロセスです
  • Angular Impulse (角度インパルス): 通常のインパルスを使用してフィクスチャを瞬時に移動させるのと同じように、角度インパルスを使用してフィクスチャを瞬時に回転させることができます

物理が有効なインスタンスにさまざまなタイプの力を適用するために、次の関数が存在します。各関数は、上記の概要よりも、力がどのように適用されるかを詳しく説明しています。

フィクスチャ(Fixtures)

GameMaker Studio 2のインスタンスに物理プロパティを設定するには、フィクスチャを割り当てる必要があります。 フィクスチャは、形状またはフォームをインスタンスにバインドします。これにより、密度、摩擦、反発などの材料特性が追加されます。 GameMaker Studio 2には、独自の形状をポイントごとに定義できる関数が用意されているため、フィクスチャはボックス、円、ポリゴン、またはその他の単純な形状にすることができます。形状ができたら、先に進んでその物理的プロパティも定義できます。 これらのプロパティは、フィクスチャが割り当てられたインスタンスが物理学の世界の他のインスタンスと反応する方法を決定するものであり、以下にリストされています。

  • Density (密度): 材料の密度は、単位体積あたりの質量として定義されます。 それは本質的に、物質がどれだけしっかりと詰め込まれているかの測定です。 フィクスチャを static 静的(動かせない)にしたい場合は、密度を 0 に設定して、基本的に無限に密度を高くする必要があります。 一定の速度で移動し、衝突の影響を物理的に受けないキネマティックオブジェクトも、密度 0 を使用して定義されます
  • Friction (摩擦): 摩擦は、固体表面、流体層、および材料要素が互いにスライドする相対運動に抵抗する力です
  • Linear Damping (線形ダンピング): これは、移動するオブジェクトの運動量を失う一般化された力です。 「現実の世界」では、物事は一般的に永遠に起こるわけではありません。 たとえば、紙飛行機は少しの間飛行しますが、それに作用する空気摩擦のために最終的に落下し、速度が低下します。 私たちが作成する物理学の世界では、そのようなものをモデル化するのは難しいため、このタイプの「一般的な摩擦」をシミュレートするために、各フィクスチャに独自の線形減衰が与えられます
  • Angular Damping (角度ダンピング): これはオブジェクトが永遠に回転するのを防ぐためにオブジェクトに適用される一般化された力です
  • Restitution (反発係数): 物理学では、反発係数は「弾性変形後のオブジェクトまたはシステムの元の状態への復帰」と定義されますが、GameMaker Studio 2のフィクスチャは実際には剛体であり、変形できないため、これは基本的にフィクスチャにおける「弾力性」と考えてください

ご覧のとおり、GameMaker Studio 2は、いくつかの簡単な機能で、ゲームに前例のないリアリズムを与える複雑なシステムとインタラクションを作成するのに役立ちます。

注意
1つのフィクスチャを定義し、それを複数のインスタンスにバインドすることができます(すべてのボールが同じ物理的プロパティを持ちながら、それぞれが個別のエンティティであるビリヤード台を考えてみてください)

生成


シェイプの定義

プロパティ

物理が有効なインスタンスが周囲の世界に適切に反応するためには、使用するフィクスチャに、フィクスチャのバウンス、摩擦、質量などを与える特定のプロパティが定義されている必要があります。次の関数を使用して、これらのプロパティをフィクスチャに設定します。

インスタンスにバインドされた後、フィクスチャの特定のプロパティを設定することもできます。 「ベース」フィクスチャをバインドするときに、バインドされた物理プロパティの一意のインデックスを変数に格納することを選択できます。 次に、これを次の関数で使用して、特定のプロパティを変更したり、それらの現在の値を取得したりできます。

  • physics_get_friction()?
  • physics_get_density()?
  • physics_get_restitution()?
  • physics_set_friction()?
  • physics_set_density()?
  • physics_set_restitution()?
  • physics_mass_properties():質量、慣性、重心を設定します

ジョイント

生成

  • physics_joint_distance_create()?
  • physics_joint_revolute_create()?
  • physics_joint_prismatic_create()?
  • physics_joint_pulley_create()?
  • physics_joint_gear_create()?
  • physics_joint_delete()?

値の設定

  • physics_joint_enable_motor()?
  • physics_joint_get_value()?
  • physics_joint_set_value()?

定数

物理粒子(Soft Body Particles)

GameMaker Studio 2はBox2D剛体物理ライブラリを使用しているため、ソフトボディ物理は許可されていません。 ただし、Liquid Fun拡張機能は、物理システムにパーティクルを追加します。これにより、剛体物理を使用してシミュレートされたソフトボディを作成できます。 基本的に、凝集力を維持する粒子の形状を作成して、全身をシミュレートできます。これにより、粒子の相互作用により、柔らかい体の印象を与えることができます。 物理粒子を使用して、液体やその他の粒子ベースの物理システムをシミュレートすることもできます。

次のセクションはすべて、物理パーティクルを使用してグループ(ソフトボディ)やその他の効果を作成することに関連しています。

基本

物理パーティクルの作成を開始する前に、通常の物理のフィクスチャと同様に、それらの基本的な物理プロパティを設定する必要があります。 ただし、これらのプロパティを設定すると、以前に作成したすべてのパーティクルと、作成した新しいパーティクルに影響するため、通常は、ゲームまたはレベルの開始時にのみこれらの関数を使用します。 ただし、個々のパーティクル(およびパーティクルのグループ)のパーティクルフラグを設定するために使用できる特定の関数があり、「バウンス」や「粘度」などのプロパティを変更して、これらのグローバル設定の範囲内でさまざまなタイプのパーティクルを作成できます。

グローバルパーティクルシステムデータの設定と取得には、次の関数を使用できます。

  • physics_particle_count()?
  • physics_particle_group_count()?
  • physics_particle_set_max_count()?
  • physics_particle_set_radius()?
  • physics_particle_set_density()?
  • physics_particle_set_damping()?
  • physics_particle_set_gravity_scale()?
  • physics_particle_get_max_count()?
  • physics_particle_get_radius()?
  • physics_particle_get_density()?
  • physics_particle_get_damping()?
  • physics_particle_get_gravity_scale()?

また、個々のパーティクル(またはパーティクルのグループ)にフラグを設定したり、単一のパーティクルまたは単一のグループから位置や色などの情報を取得したりするために、次の関数を使用できます。

  • physics_particle_set_flags()?
  • physics_particle_set_category_flags()?
  • physics_particle_set_group_flags()?
  • physics_particle_get_group_flags()?
  • physics_particle_group_get_inertia()?
  • physics_particle_group_get_centre_x()?
  • physics_particle_group_get_centre_y()?
  • physics_particle_group_get_vel_x()?
  • physics_particle_group_get_vel_y()?
  • physics_particle_group_get_ang_vel()?
  • physics_particle_group_get_x()?
  • physics_particle_group_get_y()?
  • physics_particle_group_get_angle()?
  • physics_particle_get_data()?
  • physics_particle_get_data_particle()?
  • physics_particle_group_get_data()?

生成

パーティクルは、個別またはグループの2つの方法で作成できます。 個々のパーティクルは、グローバル設定と作成時に設定されたフラグによって定義されたとおりに動作しますが、パーティクルのグループは、グループフラグに応じて異なる動作を示す可能性があります。 これらのグループフラグをさまざまな値に設定して、浸透や剛性などのさまざまなプロパティをグループに与えることができます。

パーティクルの作成には、次の関数を使用できます。

  • physics_particle_create()?
  • physics_particle_group_begin()?
  • physics_particle_group_circle()?
  • physics_particle_group_box()?
  • physics_particle_group_polygon()?
  • physics_particle_group_add_point()?
  • physics_particle_group_end()?
  • physics_particle_group_join()?
  • physics_particle_group_delete()?

削除

パーティクルを作成できるだけでなく、個別にまたはリージョン内で削除することもできます。 システムからパーティクルを削除するには、次の関数を使用できます。

  • physics_particle_delete()?
  • physics_particle_delete_region_circle()?
  • physics_particle_delete_region_box()?
  • physics_particle_delete_region_poly()?

描画

physics_draw_debug() を使用してデバッグ図面をアクティブ化していない限り、パーティクルを作成するときに画面にパーティクルは表示されません。 したがって、実際にパーティクルを表示するには、次の関数を使用してインスタンスのDrawイベントでパーティクルを画面に描画する必要があります(physics_particle_get_data()? を使用して各パーティクルのデータを取得する場合は、通常のdraw_sprite関数を使用してパーティクルを描画することもできます)

  • physics_particle_draw()?
  • physics_particle_draw_ext()?

オブジェクト変数

参考

公式技術ブログ

Wiki内検索

#search(): You already view a search box

MENU

ドキュメント

GMLリファレンス

2ch

その他



最新の30件

2024-03-07 2023-08-09 2023-05-21 2023-05-20 2023-05-04 2022-10-13 2022-07-21 2022-07-02 2022-04-06 2021-11-30 2021-11-26 2021-10-03 2021-09-23 2021-08-15 2021-06-02 2021-01-23 2021-01-21 2021-01-19 2021-01-18 2021-01-16 2021-01-15

人気の10件

今日の10件



これまでの訪問者: 3897
今日の訪問者: 1
昨日の訪問者: 5
閲覧者: 5