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

鼠标滚轮仅单向生效?武器数组滚轮切换无法逐个循环问题

解决鼠标滚轮循环切换武器的问题

嘿,我帮你捋一捋这个武器切换的问题~你的代码逻辑思路是对的,但有几个小细节导致索引不能正确逐个递增/递减:

问题出在哪?

  • 后置自增/自减的坑:你用了activeWeaponIndex++和activeWeaponIndex--,这两个是先返回当前值,再修改变量。比如在三元运算符里,当条件满足时,你返回的是旧的索引值,然后才给变量加1,等于赋值的时候根本没用到更新后的索引,自然没法正确切换。
  • 硬编码索引值:递减分支里写死了activeWeaponIndex = 3,如果以后武器数组长度变了(比如加了一把武器),这个逻辑直接就崩了,得用动态的weapons.Length - 1来获取最后一个索引。

修正方案1:修复原条件判断逻辑

把后置自增改成直接计算新索引,同时替换硬编码值:

void Update() 
{ 
    var d = Input.GetAxis("Mouse ScrollWheel"); //鼠标滚轮输入
    if (d > 0f) 
    { 
        // 先判断是否到达最后一个索引,是就回到0,否则索引+1
        activeWeaponIndex = (activeWeaponIndex + 1 >= weapons.Length) ? 0 : activeWeaponIndex + 1;
    } 
    else if (d < 0f) 
    { 
        // 先判断是否到达第一个索引,是就跳到最后一个,否则索引-1
        activeWeaponIndex = (activeWeaponIndex - 1 < 0) ? weapons.Length - 1 : activeWeaponIndex - 1;
    }
    Swap(activeWeaponIndex); //切换武器
}

修正方案2:用取模运算实现更优雅的循环

取模运算可以自动帮我们处理循环逻辑,代码更简洁,也不容易出错:

void Update() 
{ 
    var d = Input.GetAxis("Mouse ScrollWheel"); //鼠标滚轮输入
    if (d > 0f) 
    { 
        // (当前索引+1)对数组长度取模,超出后自动回到0
        activeWeaponIndex = (activeWeaponIndex + 1) % weapons.Length;
    } 
    else if (d < 0f) 
    { 
        // 递减时先加数组长度再取模,避免出现负数索引
        activeWeaponIndex = (activeWeaponIndex - 1 + weapons.Length) % weapons.Length;
    }
    Swap(activeWeaponIndex); //切换武器
}

为什么递减要加数组长度?因为如果当前索引是0,减1会变成-1,直接取模会得到负数,加上数组长度后再取模就能得到最后一个合法索引(比如数组长度为4时,(0-1+4)%4=3,正好是最后一把武器的索引)。

额外小优化:避免滚轮误触

鼠标滚轮有时候会有轻微抖动,导致d出现很小的数值,你可以加个判断忽略这些微小输入:

void Update() 
{ 
    var d = Input.GetAxis("Mouse ScrollWheel"); //鼠标滚轮输入
    // 忽略微小的滚轮输入,防止误切换
    if (Mathf.Abs(d) < 0.1f) return;

    if (d > 0f) 
    { 
        activeWeaponIndex = (activeWeaponIndex + 1) % weapons.Length;
    } 
    else if (d < 0f) 
    { 
        activeWeaponIndex = (activeWeaponIndex - 1 + weapons.Length) % weapons.Length;
    }
    Swap(activeWeaponIndex); //切换武器
}

内容的提问来源于stack exchange,提问作者L. Birkett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:12:41