← 全部概念
3D 与渲染 / 01
射线检测
用一条射线探测命中了什么
交互演示
交互演示 · 移动指针或点击画面,观察变化
射线检测会从一个点沿指定方向发出一条不可见的线,并返回它碰到的第一个物体。结果包含命中位置、距离和表面法线,在这里分别用粉色圆点和黄色箭头示意。游戏常用它实现即时命中武器、视线检测、鼠标拾取和地面检测。
适用场景
用射线检测实现即时命中武器、地面探测,或选择光标下的单位。射线没有厚度:如果弹体或角色需要留出空间,应使用形状投射检测。
实现示例
不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。
direction = normalize(target - origin)
hit = world.raycast(origin, direction, maxDistance, collisionMask)
if hit:
placeImpact(hit.point, hit.normal)常见错误
保持方向向量归一化,设置有限的检测距离,并排除射击者。射线检测只是一项查询,不会移动刚体,也不会自动施加伤害。
延伸阅读
Three.js 手册 ↗内容原作 Nicolas Zullo · 中文整理与交互改编