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

Unity 2D(C#)实现抓崖机制需松开按键再触发脱离的问题与方案

2D游戏崖边抓攀机制输入冲突修复

问题背景

开发2D游戏崖边抓攀(ledge hang)机制时会遇到典型的输入逻辑冲突:玩家按水平方向键可触发抓攀上崖,但同组方向键也被设置为抓攀状态下的脱离触发键,导致角色刚抓住崖边就会因持续按住方向键立刻掉落;设置固定等待时间的方案手感生硬,不符合操作直觉。最初尝试在玩家松开按键前将输入轴值强制设为0,但轴值为0本身就代表按键已松开,逻辑上存在矛盾。

检测左右方向键输入的基础代码如下:

mx = Input.GetAxisRaw("Horizontal");
// 检测左右方向键按压状态,返回-1、0、1三个对应值

初始版本的抓攀状态逻辑中,曾在抓攀逻辑前添加IsGrabbing判断,试图限制角色在松开按键或触发跳跃前保持抓攀状态,但由于方向键同时承担脱离抓攀的触发功能,该校验完全失效。也考虑过改用跳跃键或下方向键作为脱离按键(下方向键使用独立变量mx2检测垂直输入),但需要保留同按键触发的操作逻辑,找到适配的解决方案。

初始存在bug的抓攀逻辑代码如下:

if (IsGrabbing == true)
    {
        rb.velocity = new Vector2(0f, 0f);
        rb.gravityScale = 0f;
        // mx2用于检测垂直移动输入。如果抓攀前就按住下方向键,会触发直接脱离的问题,但由于抓攀上崖不需要按下方向键,该问题影响相对较小
        if (mx != 0 || mx2 < 0)
        {
            // 脱离抓攀、临时禁止再次抓攀的逻辑,角色落地后会重置相关状态
            IsGrabbing = false;
            anim.SetBool("IsHanging", false);
            redXSize = 10f;
            redYSize = 10f;
            greenXSize = 0f;
            greenYSize = 0f;
            rb.gravityScale = 5f;
        }

此前尝试过多种实现方案,其中使用while循环阻塞等待按键松开的方案会直接导致游戏主线程卡死,需要无卡顿、手感自然的修复思路。

解决方案

通过新增输入标记位的方案即可解决该问题:新增默认值为false的InitiateGrab标记位,仅当标记位为true时才响应方向键的脱离触发逻辑,通过标记位过滤抓攀瞬间持续按住的历史按键输入,无需使用while循环阻塞,最终实现必须松开当前按住的按键、再次按下才会触发脱离的预期操作手感。

修复后的完整代码如下:

if (IsGrabbing == true)
    {
        if (mx != 0 && InitiateGrab == false)
        {
            InitiateGrab = false;
        }
        else
        {
            InitiateGrab = true;
        }
        rb.velocity = new Vector2(0f, 0f);
        rb.gravityScale = 0f;
        if (mx != 0 && InitiateGrab == true || mx2 < 0 && InitiateGrab == true)
        {
            IsGrabbing = false;
            InitiateGrab = false;
            anim.SetBool("IsHanging", false);
            anim.SetBool("IsRising", false);
            redXSize = 10f;
            redYSize = 10f;
            greenXSize = 0f;
            greenYSize = 0f;
            rb.gravityScale = 5f;
        }
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:48:39