前言
- 這是學校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
看我同學操縱飛機感覺好好玩喔,自己玩會暈。