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 に実装されています)