ff14高级触发器不正经教程(5)-原来你在我身后~触发器方位角、距离变量的实际运用

前言
这次的教程请大家量力而行,不保证能教会大家。触发器运行效果还算不错,但以下教程文字部分可能有错误或不严谨的地方,还望帮助指正。

高级触发器官方FAQ文档:
https://github.com/paissaheavyindustries/Triggernometry/wiki/Triggernometry-FAQ-and-examples
我们主要用到的工具为下方的几个
以及空间向量夹角公式(平面空间版本):
b站表达式代码:cosθ=\frac{\vec{a}\cdot\vec{b}}{|\vec{a}||\vec{b}|}=\frac{a_{x}b_{x}+a_{y}b_{y}}{\sqrt{a_{x}^2+a_{y}^2}\sqrt{b_{x}^2+b_{y}^2}}

正文
先介绍一些性质
稍稍观察一下游戏地图我们会发现:游戏内Y轴正方向是向下的,地图最左上方的坐标是(1,1)。
使用高级触发器${_ffxivparty[1].y}与${_ffxivparty[1].x}观察下,发现地图可行动区域中间的坐标是(0,0),地图右方为X轴正向,地图下方为Y轴正向。
接下来我们来看一下高级触发器的官方文档:
heading = Heading of the entity in radians (South 0, North ±PI)
heading:以弧度表示实体的面向(游戏中的南方为0,游戏中的北方为±PI)
很有趣的表示方式,与我们认知中的截然不同。那个很流行的身位警察触发器就是对该变量的一个优秀运用。
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):两个给定点之间的距离
此为函数而非变量,如果你传入双方的坐标,那么你得到的是双方目标圈圆心的距离。对于两个玩家的目标圈来说:重合为0、相切为2。pi = 3.1415...
pi:3.14159265358979
想单独使用该变量的话可以${numeric:pi},精度蛮高的基本够用了。
别的暂时没想起什么了,有的话我在评论区补充下。

实际应用一
这期教程包括这个应用的内容是从
ff14高级触发器不正经教程(3)-无面捕/动捕Live2D直播方案介绍及初步教程
的衍生触发器组中拆出来的,想拿来参考或者改动的话直接找我要就好~该触发器原本用来控制Live2D模型的面向与视线方向,触发器完整表达式如下:
x的取值范围为(-1,1)刚好符合Live2D模型X轴参数的参数范围,若模型的参数范围为±30直接在最后做乘法即可。
y的取值范围……y没有取值范围,甚至太大了所以我对y值做了一个除以5的操作,你也不想你的Live2D拼命仰着脖子看节日活动npc吧
触发器会将x值和y值计算出来,然后通过post请求发送给后台程序,后台程序再将值反馈到模型上。几次直播下来感觉效果还不错~(指爆发期占星发卡时头摇的像个拨浪鼓)
y值只是一个z值相减的过程,没什么好说的。来简单介绍下x值的计算:
规划一下我想要的效果:游戏角色向左极限转头时x的值为-1,向右极限转头时为1
思考了一个绝本CD、翻课本、上网查资料、最后在暗恋对象朋友那里得到了答案:使用arccos公式计算角色所处位置到目标角色位置向量与y轴正方向单位向量夹角的值θ。
发现θ可能与预期相反,加一个判断:目标x值小于角色自身则θ取相反数(触发器表达式中为与-1做乘操作)。
将游戏角色自身面向(heading变量)与θ相减,得到角色转头的角度(弧度制)。
测试发现计算结果范围为(-2π,2π)。计算结果是周期函数,不应直接除2π,而应截取(-π,π)的区间。高级触发器单个表达式不允许定义变量,根据条件判断的话表达式又会很长。在试错与思考后想出了一个“我不知道为什么能运行但确实能运行”的方法:将这个值+3π、%2π、-3π、%4π、+2π后就能把这个周期函数变成我想要的样子了,它的取值范围为(-π,π)。
最后简简单单除以π,得到(-1,1)的取值范围。
实际应用二
应用二被设计配合鲶鱼精邮差使用(当然你也可以稍作修改配合文本显示Aura使用)。逻辑与应用一相近,与之不同的是最终结果被我做了向下取整的操作(round),并配合substring函数对表示方位的字符串进行截取。实际使用效果如下:
每两个一组,主动找人可以在游戏聊天框内使用宏命令(龙尾轻轻摇替换为玩家名)
“在看你”和“移开了目光”的教程可以参考
ff14高级触发器不正经教程-想让你的角色被注视时摇摇尾巴吗?
6.2.2版本已上传至github
https://github.com/raine01/ff14AuraCan/blob/main/ff14AuraCan6.2.2.xml