跳到主要内容
← 全部概念
3D 与渲染 / 01

射线检测

用一条射线探测命中了什么

交互演示

交互演示 · 移动指针或点击画面,观察变化

射线检测会从一个点沿指定方向发出一条不可见的线,并返回它碰到的第一个物体。结果包含命中位置、距离和表面法线,在这里分别用粉色圆点和黄色箭头示意。游戏常用它实现即时命中武器、视线检测、鼠标拾取和地面检测。

适用场景

用射线检测实现即时命中武器、地面探测,或选择光标下的单位。射线没有厚度:如果弹体或角色需要留出空间,应使用形状投射检测。

实现示例

不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。

direction = normalize(target - origin)
hit = world.raycast(origin, direction, maxDistance, collisionMask)
if hit:
  placeImpact(hit.point, hit.normal)

常见错误

保持方向向量归一化,设置有限的检测距离,并排除射击者。射线检测只是一项查询,不会移动刚体,也不会自动施加伤害。

延伸阅读

Three.js 手册 ↗
内容原作 Nicolas Zullo · 中文整理与交互改编