ff14高級觸發(fā)器不正經(jīng)教程(5)-原來你在我身后~觸發(fā)器方位角、距離變量的實際運用

前言
這次的教程請大家量力而行,不保證能教會大家。觸發(fā)器運行效果還算不錯,但以下教程文字部分可能有錯誤或不嚴謹?shù)牡胤?,還望幫助指正。

高級觸發(fā)器官方FAQ文檔:
https://github.com/paissaheavyindustries/Triggernometry/wiki/Triggernometry-FAQ-and-examples
我們主要用到的工具為下方的幾個
以及空間向量夾角公式(平面空間版本):
b站表達式代碼:cosθ=\frac{\vec{a}\cdot\vec}{|\vec{a}||\vec|}=\frac{a_{x}b_{x}+a_{y}b_{y}}{\sqrt{a_{x}^2+a_{y}^2}\sqrt{b_{x}^2+b_{y}^2}}

正文
先介紹一些性質(zhì)
稍稍觀察一下游戲地圖我們會發(fā)現(xiàn):游戲內(nèi)Y軸正方向是向下的,地圖最左上方的坐標是(1,1)。
使用高級觸發(fā)器${_ffxivparty[1].y}與${_ffxivparty[1].x}觀察下,發(fā)現(xiàn)地圖可行動區(qū)域中間的坐標是(0,0),地圖右方為X軸正向,地圖下方為Y軸正向。
接下來我們來看一下高級觸發(fā)器的官方文檔:
heading = Heading of the entity in radians (South 0, North ±PI)
heading:以弧度表示實體的面向(游戲中的南方為0,游戲中的北方為±PI)
很有趣的表示方式,與我們認知中的截然不同。那個很流行的身位警察觸發(fā)器就是對該變量的一個優(yōu)秀運用。
distance = Distance from the main combatant (you) to the entity
distance:從冒險家(玩家)到實體的距離
這個距離不是兩者中心點的距離,而是雙方目標圈上最近兩點的距離。ps:把雙方目標圈視作兩個圓,重合、相交、相切時distance為0。
該值同時也是判定單體目標技能是否允許施放的值。如救療的距離為30米,該變量值為30時你剛好勉強能奶到你的隊友。
玩家的目標圈大小半徑為1米。(希望我沒弄錯)
distance(x1, y1, x2, y2) = distance between the two given points
distance(x1,y1,x2,y2):兩個給定點之間的距離
此為函數(shù)而非變量,如果你傳入雙方的坐標,那么你得到的是雙方目標圈圓心的距離。對于兩個玩家的目標圈來說:重合為0、相切為2。pi = 3.1415...
pi:3.14159265358979
想單獨使用該變量的話可以${numeric:pi},精度蠻高的基本夠用了。
別的暫時沒想起什么了,有的話我在評論區(qū)補充下。

實際應用一
這期教程包括這個應用的內(nèi)容是從
ff14高級觸發(fā)器不正經(jīng)教程(3)-無面捕/動捕Live2D直播方案介紹及初步教程
的衍生觸發(fā)器組中拆出來的,想拿來參考或者改動的話直接找我要就好~該觸發(fā)器原本用來控制Live2D模型的面向與視線方向,觸發(fā)器完整表達式如下:
x的取值范圍為(-1,1)剛好符合Live2D模型X軸參數(shù)的參數(shù)范圍,若模型的參數(shù)范圍為±30直接在最后做乘法即可。
y的取值范圍……y沒有取值范圍,甚至太大了所以我對y值做了一個除以5的操作,你也不想你的Live2D拼命仰著脖子看節(jié)日活動npc吧
觸發(fā)器會將x值和y值計算出來,然后通過post請求發(fā)送給后臺程序,后臺程序再將值反饋到模型上。幾次直播下來感覺效果還不錯~(指爆發(fā)期占星發(fā)卡時頭搖的像個撥浪鼓)
y值只是一個z值相減的過程,沒什么好說的。來簡單介紹下x值的計算:
規(guī)劃一下我想要的效果:游戲角色向左極限轉(zhuǎn)頭時x的值為-1,向右極限轉(zhuǎn)頭時為1
思考了一個絕本CD、翻課本、上網(wǎng)查資料、最后在暗戀對象朋友那里得到了答案:使用arccos公式計算角色所處位置到目標角色位置向量與y軸正方向單位向量夾角的值θ。
發(fā)現(xiàn)θ可能與預期相反,加一個判斷:目標x值小于角色自身則θ取相反數(shù)(觸發(fā)器表達式中為與-1做乘操作)。
將游戲角色自身面向(heading變量)與θ相減,得到角色轉(zhuǎn)頭的角度(弧度制)。
測試發(fā)現(xiàn)計算結(jié)果范圍為(-2π,2π)。計算結(jié)果是周期函數(shù),不應直接除2π,而應截取(-π,π)的區(qū)間。高級觸發(fā)器單個表達式不允許定義變量,根據(jù)條件判斷的話表達式又會很長。在試錯與思考后想出了一個“我不知道為什么能運行但確實能運行”的方法:將這個值+3π、%2π、-3π、%4π、+2π后就能把這個周期函數(shù)變成我想要的樣子了,它的取值范圍為(-π,π)。
最后簡簡單單除以π,得到(-1,1)的取值范圍。
實際應用二
應用二被設(shè)計配合鯰魚精郵差使用(當然你也可以稍作修改配合文本顯示Aura使用)。邏輯與應用一相近,與之不同的是最終結(jié)果被我做了向下取整的操作(round),并配合substring函數(shù)對表示方位的字符串進行截取。實際使用效果如下:
每兩個一組,主動找人可以在游戲聊天框內(nèi)使用宏命令(龍尾輕輕搖替換為玩家名)
“在看你”和“移開了目光”的教程可以參考
ff14高級觸發(fā)器不正經(jīng)教程-想讓你的角色被注視時搖搖尾巴嗎?
6.2.2版本已上傳至github
https://github.com/raine01/ff14AuraCan/blob/main/ff14AuraCan6.2.2.xml