GodotのRigidBody2Dを指定の座標に直接移動させる

問題

 RigidBody2Dの自機を指定の座標にワープさせたいが、positionを変更しても移動は一瞬だけで元の位置に戻ってしまう。

原因

 物理演算が適応されるオブジェクトに対する処理は_physics_process内で行う必要がある。

解決

var warp_position : Vector2
var warp_flag = false

#ワープメソッド
func warp(pos : Vector2):
	warp_position = pos
	warp_flag = true

#物理エンジン用process関数
func _physics_process(delta):
	if warp_flag:
		position = warp_position
		warp_flag = false

考察

 分かってみれば初歩的なミス、なぜこれにハマってしまったかを考えると、

・起動直後の1回だけワープに成功していた

・その後も一瞬だけなら移動していた(様に見えた)

・Godotなら便利なメソッドが用意されているはず、という謎の期待

・眠かった

 というわけで、判断が鈍って状況を把握できなくなっていましたね、反省。でもドキュメントを読む動機につながったのはプラスだったかもしれません。特にGodot Recipesを知れたのは大きな収穫。感謝。

参考


この記事が気に入ったらサポートをしてみませんか?