Steam平台内置的手柄映射功能相当强大,甚至让我上瘾,我经常用几个小时时间来调整设置,以至于设置好之后才发现已经没有了玩游戏的时间。
在此分享一些折腾Steam手柄映射的心得供大家参考。
本文重点在于介绍Steam手柄映射时修改部分参数的具体影响,如果你想玩的游戏不是Steam游戏,或不支持手柄操作,参见自定义手柄键位映射通用设置方法… - AYANEO
还有关于本文内容的相关官方文档Steam 输入 (Steamworks 文献库) (steamgames.com)
主要目标游戏是《辐射4》,虽然辐射4本身支持手柄控制,但是完全满足不了我一颗折腾的心。所以我的做法是让《辐射4》运行在键鼠模式,然后将手柄映射到键鼠。
本文内容很无聊,没必要详细看每一节,请跳过一切不感兴趣的部分。
使用+-号连接按键/选项时,+表示同时,-表示依次。
在steam设置-控制器中,可以配置大屏幕模式、桌面模式下steam主程序中生效的按键配置。
事实上,桌面模式的映射在启动steam库中的游戏之前都生效。

在导航键组合键配置中,则可以配置【全局生效】的组合键,在按下导航键(AYA2021左侧的H键,又名Home键、西瓜键、)时生效。
可以在(某个游戏)-设置-管理-控制器配置(布局)中,为Steam库中的游戏单独设置映射。
也可以将非steam游戏加入Steam库中,参见自定义手柄键位映射通用设置方法… - AYANEO
目录
- 一一映射
- 模拟鼠标及改变灵敏度
- 方向键映射
- 激活器、长按重复、线性扳机
- 多个激活器、切换、可中断
- 多按键、循环按键
- 操作层
- 其他
1.一一映射
ABXY按键板:基本动作
- 输入样式-按键板
这是最简单的1对1映射,四个按键互不影响,当操作很基础,需要频繁触发时,安排最顺手的按键一一映射是很合理的。
- X-左ctrl(蹲/起)
- Y-E(互动)
- A-空格(跳跃)
- B-左Alt(近战攻击/投掷)
2.模拟鼠标及改变灵敏度
右摇杆:旋转镜头
- 输入样式-模拟鼠标(镜头)
显然这就是用摇杆模拟鼠标移动。
- 鼠标灵敏度
在此调节模拟的鼠标灵敏度。
一个存在的问题是,鼠标同时用来控制镜头朝向与瞄准,
转动镜头时,我希望灵敏度高一点,否则我很难找到敌人;瞄准时,我希望灵敏度低一点,否则我很难对准脑袋。
或者当我们真的要使用鼠标选择什么东西时,也经常需要不同的灵敏度。
- 模式转换键
上述问题的一个解决方案是,设置一个“模式转换键”,当我按下对应按键如RT时,按键映射会被替换成另一套,在此我们仅仅需要修改灵敏度而已,其他映射照抄,仅将灵敏度调低。
这样,我们平时可以用右摇杆快速转动镜头,按住RT时慢速转动镜头。
我们也可以用更复杂但强大的操作层实现这个效果,见第7节。
- 输出轴
如有必要,在此限定摇杆仅输出X轴或Y轴移动的信号,也就是只进行水平/垂直移动,忽略另一个方向。
3.方向键映射
左摇杆:控制移动
- 输入样式-十字键
- 上下左右----WSAD
给“左摇杆”定义了“十字键”的输入样式,这意味着,steam现在认为我们的左摇杆不是摇杆,而是一组十字键,十字键对应的输出是我们设置的WSAD。
现实:扳动左摇杆发出信号,一瞬间发出的信号可能是“角度~强度”这样复杂的东西,
steam:当作十字键处理,十字键只管方向,其他复杂的信号都忽略,然后翻译给游戏。
游戏:接收到的是键盘信号WSAD。
- 布局-8向(重叠)
此处设置十字键的布局。
十字键会输出类似“方向”的信号,除了前后左右四个方向外,还可选是否输出“前左”“前右”“后左”“后右”的斜向组合信号,不会同时输出“前后”或“左右”这样自相矛盾的信号。
如果选择8向(重叠)布局,除了上下左右直线移动之外,还可以做出斜向移动操作,45°左右推动摇杆,相当于十字键信号↗,游戏接收到的会是w+d,角色向右前方斜向移动(显然,前提是游戏支持斜向移动)。
摇杆:角度~强度 | steam:俺寻思 | 十字键:方向 | 游戏:玩家在按键盘 |
91.4°~67% | 大约90度,是右 | → | d |
41.3°~72.9% | 大约45度,是右前 | ↗ | w+d |
311.9°~1% | 按太轻,就当没按 | (无) |
还有一种布局是4向(不重叠),即使向↗45°精准推动摇杆,在同一时间也只会输出“w”或“d”两种信号之一,角色可能向右直线移动、向前直线移动、前右前右折线移动(w-d-w-d)。
摇杆:角度 | steam:俺寻思 | 十字键:方向 | 游戏:玩家在按键盘 |
44.99999° | 小于45度,是前 | ↑ |
w |
45.00001° |
大于45度,是右 | → | d |
45°附近保持 |
在前右之间摇摆 | ↑-→-↑-→-↑-→ | w-d-w-d-w-d |
模拟仿真布局会以脉冲方式输出信号,有点类似于线性扳机输出的模拟信号,同样的,也需要游戏支持接收模拟信号。
输出的信号与推动摇杆的力度有关,轻推摇杆是连续短按,推动越猛频率越高,推到底变长按,有的游戏“长按”和“连续多次短按”没有区别,有的游戏“长按”约等于“按一次”,这取决于具体实现。
前轻推、保持 | wwwwwwwwwwwww |
前全推、保持 | w(长按) |
右全推、前轻推、保持 | d(长按)wwwwwwwwwwwwwwww |
右轻推、前轻推、保持 (如果推动摇杆的力度不同) |
wdwdwdwdwdwdwdwdwdwdwdwdwdwdw wwwwdwwwwdwwwwdwwwwdwwwwdwwwwd |
右全推、前全推、保持 | w(长按)d(长按) |
暂时没找到十字门与8向(重叠)的区别。
- 点击操作-Tab键(哔哔小子)
按下摇杆时,按Tab开启哔哔小子。
设置此映射时,应考虑到目标操作是否会受到“扳动摇杆”的不利影响,因为按下摇杆时,多多少少会触发一些扳动摇杆的信号。
举例来说,如果点击摇杆为“开火”,扳动摇杆为“移动”,在开火的前一个瞬间,角色收到误输入的信号而发生了移动,就不容易命中目标。
- 附加设置-外环绑定-左shift(冲刺)
- 附加设置-外环绑定半径
将摇杆推到尽头时,自动按下“外环绑定”的按键,左shift进行冲刺。
注意,AyaNeo2021的摇杆实在是有点小,不容易区分轻推还是推到尽头。可以在“附加设置-外环绑定半径”调节阈值。
- 附加设置-外环绑定反转-(不勾选)
如果开启了“外环绑定反转”,就会变成在摇杆未推到尽头时触发绑定按键,例如在其他游戏中绑定“潜行”之类的操作。
物理十字键也可以进行外环绑定,但不能调节阈值,似乎每次按键都会触发。
4.激活器、长按重复、线性扳机
LT扳机:腰射
- 全扣操作-显示激活器
这里要进行一些高级设置,按下面的“显示激活器”,进入激活器。
可以添加多个激活器,激活器之间互不干扰。
如果激活类型相同,后添加的激活器先被激活,但不建议利用这个特性。
激活类型 | 单次激活 | 持续激活 | 停止激活 |
普通按压 | 按下 | 保持按压 | 松开 |
长按 |
保持一段时间后 最短保持时间可调 |
保持按压 | 松开 |
双击 |
在一段时间内按下两次 最大间隔可调 |
保持按压 | 松开 |
开始按压 |
按下时 |
||
释放按压 |
松开时 |
||
按下组合键 |
“组合中的按键”保持时 按下 |
保持按压 |
松开 |
在“按下组合键”持续激活时,“组合中的按键”松开没有影响。
如果同一时间触发了不止一个组合键,结果是没有组合键被激活,所以不要设计太复杂的组合键。

- 激活类型-普通按压
- 绑定-鼠标左键(开火)
- 按住以重复-开启
在辐射4中,自动武器长按开火键可以自动连发,非自动武器每次按下开火只能射击一次。
开启“按住以重复”后,长按就会改为“反复按下目标按键”,相当于硬把非自动武器变成自动武器。
- 轻扣操作
- 轻扣扳机动作样式
- 轻扣扳机端点【这里的端点应该就是“临界点阈值”】
这是一组只有线性扳机才能有效利用的设置。AyaNeo2021正式版使用了线性扳机,我们可以在扳机键上做更多的文章。
也许只有FPS狂热爱好者才会用到这个功能,为“全扣”和“轻扣”映射不同操作。然后通过不同的按压来触发它们。
全扣与轻扣的区别在于按压是否超过临界点,可以在“轻扣扳机端点”处设置临界点阈值。
不按 | 临界点 | |||||
按压 力度 |
0 |
开始 按下 |
1 | 轻扣
扳机 端点 |
2 |
按到 尽头 |
需要注意的是,表面上1是轻扣(动作),2是全扣(动作),
但我们的“全扣动作”未必会执行steam上我们设置的“全扣操作”,见下表。
按压力度变化时激活的按键映射:
|
慢按(0~2用时较长) | 快按(瞬间0~2) | ||||
按压力度 |
1 | 2 | 1 | 0 | 2 | 1 |
简单临界值 | 轻 | 全+轻 | 轻 | 无 | 全+轻 | 轻 |
微力扳机 | 轻 | 全+轻 | 无 | 无 | 全+轻 | 无 |
XX腰射 | 轻 | 全+轻 | 轻 | 无 | 全 | 无 |
单一腰射 | 轻 | 轻 | 轻 | 无 | 全 | 无 |
简单临界值只考虑压力大小,在压力1时激活轻扣,压力2时激活轻扣+全扣,压力0时停止激活。
微力扳机在压力1时激活轻扣,压力2时激活轻扣+全扣,一旦感知到压力减轻,无论是2~1、1~0、2~0,都会停止全部激活。
“快速”“普通”“缓慢”腰射会检查按下扳机的速度,“快按”时只激活全扣,三种样式的区别在于决定“快按”“慢按”的窗口时间。
举例来说,将“轻扣”设置为开镜,而“全扣”设置为开火。
轻扣0~1开镜,瞄准后,压下1~2开火,轻抬2~1停火但仍然保持开镜,压下1~2再次开火,全程保持开镜,直到彻底松开。
来不及开镜时,快按到底全扣0~2,即可不开镜开火(腰射)。
单一腰射激活一种操作后就不再改变,直到完全松开扳机。
快按0~2激活全扣,轻抬2~1停止,然后再压下1~2还是激活全扣。
慢按0~1激活轻扣,之后压到2也只是继续保持轻扣。
抬到0后才能激活另一种操作。
- 扳机键模拟输出
这个选项可以让游戏收到线性扳机的具体模拟信号,比如赛车游戏用这个控制踩油门的力度。
我不玩赛车游戏,所以并不清楚其中的细节。
5.双击激活器、切换、可中断
RB:开镜/开火
- 显示激活器
- 激活类型-双击
- 绑定-鼠标左键(开火)
- 按住以重复-开启
在第二次按压之后快速释放,只激活一次。
在第二次按压之后不释放,触发双击激活器的“按住以重复效果”。
- 添加激活器
为同一个按键设置新的的激活条件/结果。
- 激活类型-普通按压
- 绑定-鼠标右键(开镜)
- 切换-开启 【我觉得这里的“切换”应该翻译成“开关”】
用手柄一直维持着开镜的姿势有点累。开启切换就可以实现开镜开关:按一次就保持开镜,再按一次结束开镜。
- 可中断-开启
很明显,“长按”“双击”这两种操作包含了“普通按压”。
假设有一款战争模拟游戏,普通按压映射为“投降”,双击映射为“反击”,本来我打算反击,没想到第一次按按钮的瞬间,投降操作就被触发了!这怎么行!
将“可中断”设为开启,“普通按压”的触发就会具有惰性,只有确认“双击”和“长按”触发器都不可能被触发后,“普通按压”才会被触发。
如果将“可中断”设为开启,双击LB,开火,不开镜;单击LB,在双击延时判定结束后,开镜。
如果将“可中断”设为关闭,无论是否按第二下LB,都会开镜;而如果确实是双击LB,再执行开火,之前的开镜操也不会被取消。
6.多按键、循环按键
十字键:切换装备/选择对话
物理十字键能够模拟的东西相对于摇杆来说略少一些,因为十字键本身不能输出类似“扳动摇杆力度”的信号,它和按键板似乎没啥区别(理论上,你不能同时按下方向键的“左右”或“前后”,而按键板不拘此格)。
- 输入样式-按键板
我开了一个辐射4的Mod,将传统的“方向键选择对话”改为“数字键选择对话”,这样我们就可以用十字键控制选择对话和切换装备两种行动了。
辐射4支持编号12种装备,对应快捷键是1234567890-=,十字键只有4个,我要想办法让这4个按键多实现一些功能。
- ↓-多按键切换开启-3-9-0
多按键切换开启后,就可以同时触发绑定的多个按键。
为装备槽位3、9、0分配胸甲、臂甲、腿甲,按↓相当于按3+9+0 ,一键快速换装。
注意,表面上它们是被同时按下的,实际情况是,这些按键将会根据刚刚我选择它们的顺序被依次按下,中间有微小的时间差。
例如,
多按键切换开启-Ctrl-z,触发时相当于按ctrl+z,通常在文本编辑器中这是“撤销”操作;
多按键切换开启-z-Ctrl,因为Ctrl在z之后被按下,未必触发“撤销”操作,这取决于具体实现。

- ←-多按键切换开启-4-8
- 显示激活器
- 循环绑定-开启
循环绑定开启后,对应键位的映射将会按顺序在绑定的多个按键中循环。
为装备槽位4、8分配燃烧瓶、地雷,就实现了按←投掷武器循环切换。
注意,循环切换没有“智能”,即使按下的某个按键没有生效,也会自动切换到下一个映射。在辐射4中,投掷武器的切换没有冷却时间,但主武器切换有,所以循环切换主武器未必可行。
7.操作层
“操作层”概念类似图层(或者蒙版),激活操作层时,该操作层已设置的映射将会覆盖现有映射,未设置的部分则是透明的,仍采用旧的映射,而不是未定义。
允许存在多个操作层,优先级是“后来优先”。
添加一个操作层,取名为“AIM”,我打算在瞄准的时候执行一些不一样的操作。

添加操作层集后,映射按键时最上面一行会多出一个按钮,用来影响操作层/集。
应用操作层,激活后将目标操作层覆盖到顶层(优先)。
移除操作层,激活时将目标操作层移除。
保留操作层【保留应该是hold,保持】,激活器保持(按住)时应用,停止保持时移除。
一般来说,这约等于在同一按键上绑定两个激活器:1,激活类型-“开始按压”-应用操作层;2,激活类型-“释放按压”-移除操作层。
操作层设置可能存在很多难以预料的bug,红迪上有玩家推荐用“应用”“移除”激活器代替保留操作层,据说可以减少bug。

RT:切换操作层
全扣操作-【操作层/集】-保留操作层-确定-选择操作集-【AIM】-确定
全扣RT并保持时,刚刚设置的“AIM”操作层就会覆盖到DEFAULT层之上。
- AIM操作层-右摇杆
- 输入样式-模拟鼠标(镜头)
- 鼠标灵敏度
选择一个较低的灵敏度,便于瞄准。
贯彻到底,再增加一个操作层AIM2。
- 轻扣操作-【操作层/集】-保留操作层-确定-选择操作集-【AIM2】-确定
- 轻扣扳机动作样式-简单临界点
- AIM2操作层-右摇杆
- 鼠标灵敏度
这样我们就可以用RT扳机压力0/1/2控制三种不同镜头灵敏度,绝了。
不过,在未来,AYA将会提供更好的陀螺仪支持,希望不久之后我可以用陀螺仪瞄准。
- AIM2操作层-LB-左Alt(屏住呼吸)
“屏住呼吸”操作仅在狙击模式下出现,刚好可以绑定在这一层。
在简单临界点样式下,无论轻扣全扣,AIM2操作层都会被应用。
Alt已经映射在按键板上了,但此时右手忙要着控制镜头,所以在左手也映射一个。
- AIM2操作层-十字键-→-7
为装备槽位7分配狙击枪,平时按→是切换2号装备,仅在我按住RT时切换为7号装备。
8.其他
操作集
辐射4有一个家园系统,建设家园需要的键位和战斗时完全不同,此时可以增加一个操作集,用来安排家园系统的键位。
操作集之间没有透明的映射,也不共享操作层,除了开始时为了方便可以复制之外,可以认为是一套全新的映射。
唯一需要注意的是,别忘了设置切换操作集的映射。
操作集的设置与操作层基本一致。
键位映射-【操作层/集】-更改操作集-确定。
触发延时
- 激活器-触发启动延时
激活器被激活后,等待一段时间再输出。
设置多个激活器,可以实现“依次按下X-X-X-X”的效果,而不是几乎同时按下。
- 激活器-结束触发延时
激活停止后,保持一段时间再停止。
可以让“按一下”变成“按一小会儿”。
无穷
在对应操作层/集激活时,一直被激活的映射。
在另一款游戏中,我将无穷映射到“拉弓”操作上,这样只要切换到对应层,就会自动保持开弓状态。

滚轮
- 输入样式-滚轮
摇杆、十字键、按键板都可以映射为“滚轮”,最基础的应用是映射到鼠标滚轮,模拟滚轮滚动。
- 滑动方向
除了点击(按下)绑定之外,滚轮只识别“向前”和“向后”两种输入。
首先判断“运动轨迹”,
摇杆比较好理解,就是推动摇杆的轨迹。
十字键、按键板短时间内发出两个信号后,根据这两个信号的相对位置决定运动轨迹:
相邻按键如Y-B,↑-→,是顺时针、左往右、上往下;
相邻按键如X-Y,←-↑,是顺时针、左往右、下往上;
相邻按键如A-X,↓-←,是逆时针、右往左、下往上;
相对按键如Y-A,←-→,无效;
相同按键,无效。
确定运动轨迹后,根据此处设置的“滑动方向”决定这个轨迹输入的到底是“向前”还是“向后”。
👈向前 | 向后👉 | |
环形 | 顺时针 | 逆时针 |
水平 | 右往左 | 左往右 |
垂直 | 下往上 | 上往下 |
- 向前滚动绑定
- 向后滚动绑定
绑定接收到“向前”或“向后”输入时产生的输出。
- 附加设置-滚轮列表
- 附加设置-列表头尾连接
当滚轮列表有效时,向前、向后绑定无效。
根据输入,在移动滚轮列表中移动指针,然后输出指向的内容。
举例来说,
如果滚动列表绑定123456,列表头尾连接开启,上次输出3。
接收到“向前”,输出2;
再接收到“向前”,输出1;
接收到“向后”,输出2;
接收到“向前”,输出1;
再接收到“向前”,输出6。
这样明明只有4个按键,却可以绑定最多10个输出。
径向菜单、触摸菜单、快捷菜单
同样是绑定更多输出的办法,仅在大屏幕模式下生效,也就是说不能在桌面模式使用。
效果和滚轮列表类似,区别在于,可以在屏幕上显示一个你自定义的图形菜单,类似一些游戏中的“武器轮盘”,更方便选择。
如果有人需要请留言,现在我懒得写,以后补。
最近使用
我的收藏
大家上传的表情
{each $comments as $comment}-
{if $comment.author.verify_identity}
{/if}
{if $comment.reply}
-
{each $comment.reply as $reply}
{/if}
{/each}
{if $comment.is_top}{lang_comment.top}{/if}{$comment.author.username}:{@$comment.content}{if $comment.img}
{/if}
{lang_comment.reply} {$comment.relativeTime} {if settop} {($comment.is_top)?lang_comment.untop:lang_comment.top} {/if} {if $comment.user_id==uid} {lang_comment.delete} {else} {lang_comment.report} {/if} {$comment.liketimes}
{if $reply.touser}{$reply.author.username} {lang_comment.reply} {$reply.touser.username}{else}{$reply.author.username}{/if}:{@$reply.content}{if $reply.img}
{/if}
{/each}