コンベアベルト

ℹ️ 留意事項

この記事は Godot 3から Godot 4 へ内容の書き換え中です。 Godot4では存在しない変数、関数が含まれている場合があります。もしその場合はリポジトリのIssuesまでご報告ください。

課題

キャラクターまたはリジッドボディを移動させるコンベアベルトオブジェクトを作成したい。

解決策

constant_linear_velocity プロパティを使用することで、StaticBody2Dだけでコンベアベルトオブジェクトを作成できます。

メモ

この問題を3D環境で解決する方法については以下を参照ください。

以下に具体例を示します。StaticBody2DRigidBody2Dを使用しています。追加コードは一切ありません。スタティックボディの線速度一定(200, 0) に設定されています。

alt alt

ベルトの動きをアニメーション化

コンベアベルトの「外観」を表現する方法は、使用するアートアセットによって異なります。今回のデモプロジェクトでは、以下の単一サイズ88×88ピクセルのタイルマップのみを使用しています。

alt alt

スタティックボディに Sprite を追加し、 テクスチャ セクションで「新規AtlasTexture」を選択してください。

alt alt

タイルテクスチャをプロパティのTexture項目に配置し、Region(0, 0, 880, 88)に設定してください。

alt alt

880を選択すれば、幅が正確に10タイルのコンベアベルトを作成できます。必要な幅を自由に設定できます。

alt alt

ヒント

画像が繰り返されていない、または表示がおかしい場合、リピート フラグを「有効」に設定して再インポートしてください。

Region プロパティの x の値を調整してみてください。タイルがずれるのが確認できるはずです。これがベルトのアニメーションに必要な動きです。このアニメーションは AnimationPlayerを使用するか、コードで実装するかです。ここでは後者の方法を実演します。

extends StaticBody2D

@export var speed = 100

func _ready():
    constant_linear_velocity.x = speed

func _process(delta):
    $Sprite.texture.region.position.x -= speed * delta

このコードは、ベルトが目標速度で動作することと、アニメーションが物理効果と同期することを保証します。注意点として、方向は反対になっています。領域の x 値を増やすと画像は左方向に移動します。

alt alt

これはキャラクターボディに対しても完璧に動作します。同じコンベアベルトオブジェクトの追加する場合は、プラットフォームキャラクターを参照してください。

alt alt

3D

執筆時点では、constant_linear_velocityStaticBodyを使用した3D環境で正しく動作しません。

ただし、プロジェクト設定で「弾丸」から「GodotPhysics」エンジンに変更すれば、この手法を使用できます。

alt alt

alt alt

関連レシピ