对方舟阻挡机制的完整解释
本文将详细解释明日方舟与阻挡相关的机制。

阻挡半径
众所周知,在明日方舟中,干员的受击判定区域是一个半径0.25的圆,而敌人的受击判定区域是一个半径0.1的圆,物理碰撞箱是一个宽0.2高0.4向下偏移0.1的胶囊型碰撞箱。但是,这些和阻挡机制,都没有任何关系。
阻挡机制使用的是一个被称作阻挡半径的东西,这个东西只存在于角色类单位(包括干员,召唤物,关卡装置等)身上。
对于所有的干员和召唤物,阻挡半径都是0.7071,也就是0.5√2,一个边长为1的正方形的对角线的一半。部分装置可能会有不同的阻挡半径,具体的可以在prts.wiki上查到。
当某个角色的中点,和敌人的中点,之间的距离小于等于这个角色的阻挡半径时,这个敌人就可以判定为被阻挡。

角色类单位每3帧扫描阻挡半径内未被阻挡的敌人,判定一次是否可阻挡。同时有多个可被阻挡的敌人时,优先阻挡距离自身中心最近的敌人。

阻挡偏移
在部分情况下,阻挡会使被阻挡的敌人的位置产生偏移,这个现象非常容易在游戏中被观察到。下面将详细介绍阻挡偏移的规则。
阻挡偏移的产生需要一个前提条件:敌人B的中点与阻挡ta的单位A的中点不重合(距离>0.00001)。否则阻挡偏移不会产生(例如5-3开局的术士)
只阻挡一个敌人时,阻挡偏移的逻辑相当简单:如果角色A到敌人B的向量AB长度不足0.5,则延其方向将长度延长到0.5(即AC)。

阻挡多个敌人时,阻挡偏移的逻辑会变得复杂。在执行完长度延长操作后,所得到的向量记作AC。
若C点半径0.1范围内存在其它已被A阻挡的敌人,则遍历除C外所有已被A阻挡的敌人(记作Dn),对每个敌人,按以下逻辑记录一个修正向量:

1. 若DnC长度<0.1,则将ADn绕A点顺时针旋转90度,标准化(方向不变,长度变为1)后,累加至修正向量中。

2. 若0.1<=DnC长度<0.4,则取 (0.4-DnC长度) * 50 * 标准化后的DnC,累加至修正向量中。

3. 若DnC长度>=0.4,无事发生。
遍历完所有敌人,得到累加的修正向量后,将修正向量的长度改为0.2,并与向量AC相加,得到的向量记作AE。最后将AE的长度设置为AC的长度,得到向量AF。


F点即敌人B被阻挡后移动到的位置,BF即俗称的阻挡偏移。敌人B会在0.2s内强制移动到F点。
F点的位置会被记录,作为敌人B的稳定阻挡位置。A再阻挡其它敌人,进行阻挡偏移的计算时,获取敌人B的位置会获取为F(即上文中的Dn均为其它敌人的稳定阻挡位置)
利用阻挡偏移,可以将免疫失衡的敌人入坑。例如这个视频利用阻挡偏移实现了蔓德拉的入坑。(海沫入坑这种主要与移动惯性相关,和阻挡偏移关系不大)