You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity2D使用Platform Effector 2D时isGround接地判断误触发问题求解

问题原因

你当前的接地检测只判断了线碰撞是否命中Ground层,没有区分Platform Effector 2D的单向碰撞特性:角色向上跳穿平台时,射线从下往上扫过平台碰撞体也会返回命中,直接导致isGround误判为true。
另外你注释掉的CheckCollisions方法存在明显笔误:Physics2D.Raycast(transform.position * groundRayCastLenght, ...) 错误地对坐标做了乘法,会导致射线起点完全偏移,好在你没有启用这个方法。

解决方案

修改接地检测逻辑,新增两个判定条件过滤误判:

  1. 只有角色y轴速度<=0(处于下落或静止状态,非上升跳穿状态)时才可能判定接地
  2. 检测碰撞点的法线方向,只有法线朝上(说明是站在平台顶面)时才判定接地

具体代码修改

替换Update方法中isGround的赋值逻辑即可:

// 执行线检测并获取碰撞详情
RaycastHit2D groundHit = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
// 同时满足三个条件才判定为接地
isGround = groundHit.collider != null 
           && _rb.velocity.y <= 0.01f // 小阈值避免刚体抖动误判
           && Vector2.Dot(groundHit.normal, Vector2.up) > 0.9f; // 法线接近朝上,有斜坡可降低阈值到0.7
额外优化建议
  • 如果角色碰撞体宽度较大,可将Linecast替换为BoxCast,避免边缘位置的检测漏判
  • 你现有OnCollisionEnter2D中维护的canPassThrough变量也可以加入判定条件,进一步降低误判概率

内容的提问来源于stack exchange,提问作者chaniloko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:48:01