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

Unity2D/C#:如何让射线检测忽略首个碰撞实现条件跳穿单向平台?

解决单向平台跳穿的距离限制问题

嘿,我明白你遇到的问题了——从角色中心发射的射线总是先碰到脚下的单向平台,导致没法检测到下方的目标平台。其实解决这个问题的核心就是让射线跳过第一个碰撞体,然后检查后续的碰撞是否在你设定的距离范围内。下面给你具体的实现思路和代码调整方案:

核心思路:用RaycastAll获取所有碰撞,跳过首个目标

Physics2D.Raycast只会返回第一个碰撞结果,而RaycastAll会返回射线路径上所有的碰撞体数组。我们可以利用这一点,跳过第一个碰撞(也就是当前站立的单向平台),然后检查剩下的碰撞体是否符合「单向平台+距离在限制内」的条件。

具体实现步骤

1. 新增跳穿距离参数

先在脚本里加一个可调整的公共变量,方便你在Inspector里设置允许跳穿的最大距离:

// 允许向下跳穿的最大距离,可在Inspector中调整
public float jumpDownMaxDistance = 2f;

2. 编写检测下方有效平台的方法

新增一个专门的方法来判断下方是否有符合条件的跳穿目标:

private bool HasValidJumpDownTarget()
{
    // 先确认当前确实站在单向平台上,不然直接返回false
    if (!State.IsCollidingWithOneWay)
        return false;

    // 设置射线起点:从角色碰撞体底部稍往下一点,避免刚好碰到当前平台的边缘
    Vector2 rayOrigin = new Vector2(raycastOrigins.center.x, raycastOrigins.bottom.y - skinWidth);
    // 发射向下的射线,获取所有碰撞结果
    RaycastHit2D[] allHits = Physics2D.RaycastAll(rayOrigin, Vector2.down, jumpDownMaxDistance, collisionMask);

    // 调试用:在Scene视图画出射线,方便查看检测范围
    Debug.DrawRay(rayOrigin, Vector2.down * jumpDownMaxDistance, Color.cyan);

    // 跳过第一个碰撞(当前站立的单向平台),遍历后续碰撞
    for (int i = 1; i < allHits.Length; i++)
    {
        RaycastHit2D hit = allHits[i];
        // 检查是否是单向平台,且距离在限制内
        if (hit.collider.CompareTag("platformOneWay") && hit.distance <= jumpDownMaxDistance)
        {
            return true;
        }
    }

    // 没有找到符合条件的平台
    return false;
}

3. 修改CanJumpDown的判断逻辑

把原来的CanJumpDown条件(仅检测跳穿按钮),改成同时检测是否有有效目标平台:

// 假设你原来的CanJumpDown是这样的,现在加入距离检测
private bool CanJumpDown => Input.GetButton("JumpDown") && HasValidJumpDownTarget();

4. 保留原有移动逻辑的兼容性

你原来的MoveVertically方法里的跳穿逻辑不需要大改,因为现在CanJumpDown已经自动包含了距离限制的条件——只有当下方指定距离内有单向平台时,才会允许角色穿过去。

关于复用现有射线还是新增射线的问题

我更推荐新增专门的射线检测,原因有两个:

  • 现有垂直射线是用来处理角色移动时的碰撞校正(比如落地、头顶撞墙),逻辑和跳穿检测完全不同,分开写更清晰,也不会干扰原有移动逻辑。
  • 如果强行复用现有射线,你需要在移动检测的循环中额外记录下方平台的距离,反而会让代码变得复杂,不如新增一条射线直接明了。

这样调整后,角色就只会在下方指定距离内有单向平台时,才能触发跳穿功能,完美解决你的需求~

内容的提问来源于stack exchange,提问作者Ginger and Lavender

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:36:53