前往
大廳
主題

【Unity 數學學習筆記】學一下tan與atan ,用atan反推角度,做個敵方飛船迴轉效果

%%鼠 拒收病婿 | 2020-11-04 03:14:39 | 巴幣 12 | 人氣 1378

前言
  • 這是學校VR專題,玩家的飛船是用VR設備控制的,只是我懶得接VR了,所以直接在編輯器裡面操控玩家飛船的行走方向。
  • 我數學很爛。

先上展示影片:

影片中主要有兩個物件,player ship和 enemy,用紅線的gizmos連接兩者看得比較清楚。
我有個飛船的AI放在enemy (敵人飛船)上,控制敵人迴轉的效果。
照理來說敵人都是追著玩家跑,但若直直的追著又太死板,圓弧的追逐效果可以用lerp去做,但會有個問題是,離玩家到達一定距離時,敵人飛船就會像比克的光殺炮一樣與玩家保持固定距離繞行。
(示意圖www)

所以這次要解決的是如何製造出電影常有的正面對決後迴轉繼續攻擊的效果。

主要概念是"與玩家之間的夾角越小(面向玩家的程度),旋轉速度越小"。

2D看起來比較單純。假設我在3D的空間想用兩個點之間的夾角去做旋轉速度的乘數,就找綠色問號的值。

Unity內建的取角度方法我不常用(限制有點多不太想背),加上也想玩玩看atan函數,所以這次用斜率反推角度。
以下是大佬同學贊助的斜率公式。 (原點至 (x0,y0,z0)的斜率)

程式碼短短的~
attack_target是玩家。
m是照上面公式取得的斜率。
atan是tan的反函數,tan是代入弧度得斜率,atan是代入斜率得弧度。
m_angle多除 (pi/2)是讓他保持在-1~1之間,最後用他來調整旋轉速度。 (可以想像pi/2是tan的比例尺的一單位)
atan的介紹推薦看這個:

以下是我對tan的了解,不知道有沒有錯
畫成圓的話:  (m=斜率)
弧度pi/4 =45度角,45度角時形成等腰三角形,斜率可以想像成y與x的比例,因為是等腰所以y:x=1。

所以影片裡面的例題:


有趣的是,sin和cos的週期是360度 (-180~180度,經歷最高與最低),tan的週期是180度(-90~90度,經歷 0~無限大與0~負無限大)



雜談:
這禮拜六要去台北專題比賽的會場擺攤,路過會場的人可以來玩玩看XD
看我同學操縱飛機感覺好好玩喔,自己玩會暈。
送禮物贊助創作者 !
0
留言

創作回應

KK
雖然我覺得光殺砲應該不是這樣用的......不過示意圖可以拿100分!
2020-11-04 10:56:40
御安鴨·摸頭害鴨哭
好,我看不懂,我現在連怎麼調出數據顯示在螢幕上都還不會
2020-11-04 11:00:13
悠閒紅茶
然後就貫穿了一對兄弟
2020-11-04 12:16:21
%%鼠 拒收病婿
更新,Atan也能不用自己求斜率float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
2021-06-14 18:07:45
追蹤 創作集

作者相關創作

更多創作