Learn · modules

Minecraft 中什么是穿透?击穿墙壁的原理详解

穿刺技能会忽略视线检测,使攻击穿透墙壁。以下是其运作方式以及服务器几乎总是会检测到它的原因.

TRtrolPublished 1 min read

穿刺是什么?

穿刺是一种战斗模块,即使攻击者和目标之间有坚固的阻挡物,也能让攻击命中。普通 Minecraft 战斗会先进行一次检查:游戏会追踪一条从你到你击中的目标之间的线,如果这条线在到达目标之前击中地形,则攻击不会生效。穿刺会跳过此检查。栅栏、墙壁、石板,这些都不再重要。检查要么通过,要么失败,而穿刺只是移除了这个要求,这正因如此,它成为了服务器容易检测到的东西之一。

工作原理

原版 Minecraft 在击中目标之前,它会先进行一次射线检测。游戏会从攻击玩家向目标追踪一条直线,并在该直线接触到的第一个实心方块处停止。如果该方块比目标更近,则攻击会落空。这个简单的检查足以让墙壁、紧闭的门或甚至是一根栅栏桩阻止挥击.

穿刺会移除或绕过光线投射,因此攻击会穿透,就像没有阻挡一样。移除并非总是完全的;有些实现方式会保留阻挡碰撞以供移动,但专门用于战斗时则会放弃,还有少数仅停止检查路径上的实体,而非地形,这是一种更狭隘的相同概念。最终结果在所有情况下都是一致的:即使两者之间存在坚实的物体,攻击仍然命中

穿刺与触及

将这与Reach区分开来是值得的。Reach决定了击中的距离范围。Piercing与距离无关,它关注的是两个点之间的线上的内容,而不是该线的长度。一名玩家可以拥有完全普通的Reach,但仍然在使用Piercing,两者经常一起出现,导致人们容易混淆。

PiercingReach
改变的内容视线要求击中距离限制
穿透玩家之间的墙壁任意范围的开阔空间
检测服务器射线投射检查击中距离与位置

服务器为何会感染

简短的回答是:判定是几何式的且无可辩驳的。击打瞬间,服务器可以在两个玩家的实际位置之间运行自己的射线投射。如果坚实的地面位于该路径上,那么挥杆无法落地的理由就显得毫无道理。与伸展或旋转平滑处理不同,服务器需要为延迟和正常的人类不精确性预留空间,而墙壁要么存在,要么不存在。这几乎不留有误判的空间,也意味着玩家很难逃脱.

常见问题