コンベアベルト
この記事は Godot 3から Godot 4 へ内容の書き換え中です。 Godot4では存在しない変数、関数が含まれている場合があります。もしその場合はリポジトリのIssuesまでご報告ください。
課題
キャラクターまたはリジッドボディを移動させるコンベアベルトオブジェクトを作成したい。
解決策
constant_linear_velocity プロパティを使用することで、StaticBody2Dだけでコンベアベルトオブジェクトを作成できます。
この問題を3D環境で解決する方法については以下を参照ください。
以下に具体例を示します。StaticBody2DとRigidBody2Dを使用しています。追加コードは一切ありません。スタティックボディの線速度一定は (200, 0) に設定されています。
ベルトの動きをアニメーション化
コンベアベルトの「外観」を表現する方法は、使用するアートアセットによって異なります。今回のデモプロジェクトでは、以下の単一サイズ88×88ピクセルのタイルマップのみを使用しています。
スタティックボディに Sprite を追加し、 テクスチャ セクションで「新規AtlasTexture」を選択してください。
タイルテクスチャをプロパティのTexture項目に配置し、Regionを(0, 0, 880, 88)に設定してください。
880を選択すれば、幅が正確に10タイルのコンベアベルトを作成できます。必要な幅を自由に設定できます。
画像が繰り返されていない、または表示がおかしい場合、リピート フラグを「有効」に設定して再インポートしてください。
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 値を増やすと画像は左方向に移動します。
これはキャラクターボディに対しても完璧に動作します。同じコンベアベルトオブジェクトの追加する場合は、プラットフォームキャラクターを参照してください。
3D
執筆時点では、constant_linear_velocityはStaticBodyを使用した3D環境で正しく動作しません。
ただし、プロジェクト設定で「弾丸」から「GodotPhysics」エンジンに変更すれば、この手法を使用できます。