簡單記錄所學
通常遊戲開發上會有角度上的需求 - 我跟斜對面的敵人,我要轉幾度才會面對他呢
這時候拿出我們的三角函數 - 正切函數 tanθ = a / b
但正切是求三角函數的值,如果我們已知 a 與 b 的話,怎麼反過來求角度θ
這時候就可以利用反三角函數 - arctan 來達到需求
y = tan( θ )
θ = arctan( y )
Unity 中就有兩種 arctan 的方法
1. Atan( tanθ ) => Atan( y / x)
2. Atan2( y, x) => 此為反正切的變種
其實以一張圖來看就會比較好懂,tanθ 就是斜率的概念,
以兩點X的變化量和Y的變化量之概念帶入上述方法,近而求到角度。
Atan2 有優勢的地方於直接塞入座標 (x,y),避免了Atan ( y/x ) x = 0 的異常狀況。
且 Atan2 值域 [ -π, π ] 比起 Atan 值域 [ -π/2, π/2 ] 來的好用.
以下圖來看,把值域當作三維的高(弧度),可以發現其運作的不同。
有了以上概念來實作持續面向2D物體
SampleCode -
對了,角度是從X軸往左增長,如果你的原圖不是朝X軸方向的,記得扣掉相對應的角
Reference: