【Godot】2つの角度差の最短を求める

2Dゲームを作るときにたまに必要になるのですが、計算方法をすぐに忘れてしまうので、個人的なメモとして記事にしました。

具体的には、キャラクターが「左」を向いているとします。そして「上」に敵がいるとします。

そうした場合に敵の方向に回転するときに、最短となる右回りで少しずつ回転するための処理となります。

2つの角度差の最短を求める

実は私が昔から参考にしているページがあって、その計算方法を長年使い続けています。

GDScriptでの実装例

リンク先の記事のコードを参考にしたものは以下のとおりです

# 最短の角度差を求める
# @param now 現在の角度
# @param next 目標となる角度
func _diff_angle(now:float, next:float) -> float:
	var d = next - now
	d -= floor(d / 360.0) * 360.0
	if d > 180:
		d -= 360
	return d

floor() は 小数値が 0.5 より小さければ切り捨てて、0.5以上であれば切り上げる関数です。

360で割っているので、180を境界として最短の角度差を求められるわけですね。

完成プロジェクト

角度差を求めるサンプルプロジェクトを添付しておきます。(Player.gd に実装されています)