尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

角色移动基础:地面检测、台阶与斜坡处理

角色移动基础:地面检测、台阶与斜坡处理 角色移动这条线,滑动讲了,解穿透讲了,但一直绕开了一个最基础的问题:角色到底怎么知道自己"站在地上"?这事听着比撞墙滑动简单,真做起来坑一点不少。而且它牵出另外两件连带的事——遇到台阶能不能自动迈上去、遇到斜坡能不能站住或者该不该往下滑。这三件事:Ground、Step、Slope,是拼在一起的,分开讲反而讲不清。这篇一次说完。照旧全程定点,单位米。为什么"站在地上"是个需要判定的东西你可能觉得,角色 y 坐标等于地面高度,不就是站在地上吗?没这么简单。角色在竞技 FPS 里的行为高度依赖"我现在是不是踩着地":踩着地才能跳、才有正常的移动摩擦、才播放脚步声、才不受下落重力。一旦这个状态判错,连锁问题一大堆——明明站在地上却不能跳(判成了空中)、明明在空中却一直播脚步(判成了地面)、走个小坡就被当成起跳导致相机一抖一抖。所以"是否着地"(grounded)不是一个坐标比较,是一个需要每帧主动检测、还得带点容差和迟滞的状态。这是三件事里的地基,先说它。Ground:往脚下探一条短射线判定着地的标准做法,是每帧从角色脚底往下投一个短距离的检测——射线或者一个薄薄的下扫(sweep),看脚下这么点距离内有没有地面。● 角色 │ │ ← 脚底 ▼ 往下探一小段(probe 距离) ───┴─── 探到地面 → grounded = true /////// 探不到 → grounded = false(在空中)
返回列表