yuzu模拟器吧 关注:186,249贴子:784,462
  • 35回复贴,共1

yuzu模拟器使用vjoy和mouse2joystick实现多映射和宏命令

只看楼主收藏回复

用过cemu玩旷野之息的都知道,使用vjoy和mouse2joystick就能够实现按键映射到键鼠。
yuzu自带键鼠映射,但我初上手感觉有点不够用,yuzu的按键似乎不能“一对多”,似乎也不能写宏。
mouse2joystick本质上是ahk,玩botw的时候我用这个写了风弹、图层残留、近战后/侧跳、飞雷神等宏,感觉是真的好用。推荐给爱折腾模拟器的各位。
如果吧友知道yuzu原生的一对多映射和宏命令的写法,我就把这贴删了。
下面是教程


IP属地:广东1楼2023-06-14 23:10回复
    首先去下载GitHub上的mouse2joystick,这个是英文版,无所谓的。
    下来后直接双击打开里面的mouse2joystick.ahk文件,运行。(电脑上要先安装autohotkey才能运行)
    找到General选项,把Executable Name那一栏的cemu.exe改成yuzu.exe
    1、一对多映射
    按键在Mouse2Joystick选项下的Keys里面自己设置,但要实现一对多映射,得在Saved KeyList Manager里面先存储到按键方案(随便取个名字),然后打开mouse2joystick文件夹的根目录下的SavedKeyLists.ini文件找到自己设置的那个按键方案的名字,需要一对多的地方用“|”竖线隔开多个按键名就行。例如我的:
    [me]
    KeyList=e,LShift|RShift,Space,LButton,q,MButton|r,RButton,XButton1,Enter|t|NumpadEnter,Tab|-,b,v,3|Up,4|Down,1|Left,2|Right,m,\
    这里面比如手柄四个方向键对应键盘方向键或键盘1234,手柄R可以用键盘R也可以用鼠标中键,这就是一对多映射的意思,很多时候这样按着能更顺手一点。


    IP属地:广东2楼2023-06-14 23:25
    回复
      2、适配yuzu的操作
      关掉电脑右下角的mouse2joystick,将mouse2joystick.ahk文件拖入文本编辑器,找到setStick(x,y, a := False) 这个函数,在函数体最前面加入
      y:=y*-1
      即可。然后保存,重新双击运行这个mouse2joystick.ahk文件。
      然后打开yuzu,在vjoy激活的情况下(用过cemu的都知道怎么做我就不说了),进入按键设置,
      在输入设备中点击vJoy Device 0,右边的配置方案最好留个名字等下保存,然后设置按键。
      设置按键的方法,是先点击面板上的按键,在它等待输入期间,按F1,再按相应按键,模拟器就识别到vjoy的按键了。然后再按F1回来才能用鼠标点击下一个按键。这样做实在太繁琐,我的文件是这样的:
      [Controls]
      type\default=true
      type=0
      button_a\default=false
      button_a="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:0"
      button_b\default=false
      button_b="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:1"
      button_x\default=false
      button_x="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:2"
      button_y\default=false
      button_y="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:3"
      button_lstick\default=false
      button_lstick="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:10"
      button_rstick\default=false
      button_rstick="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:11"
      button_l\default=false
      button_l="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:4"
      button_r\default=false
      button_r="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:5"
      button_zl\default=false
      button_zl="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:6"
      button_zr\default=false
      button_zr="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:7"
      button_plus\default=false
      button_plus="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:8"
      button_minus\default=false
      button_minus="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:9"
      button_dleft\default=false
      button_dleft="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:14"
      button_dup\default=false
      button_dup="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:12"
      button_dright\default=false
      button_dright="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:15"
      button_ddown\default=false
      button_ddown="engine:sdl,guid:0300000034120000adbe000000000000,port:0,pad:0,button:13"
      button_sl\default=false
      button_sl=[empty]
      button_sr\default=false
      button_sr=[empty]
      button_home\default=false
      button_home=[empty]
      button_screenshot\default=false
      button_screenshot=[empty]
      lstick\default=false
      lstick="axis_x:3,engine:sdl,guid:0300000034120000adbe000000000000,port:0,range:1.000000,pad:0,axis_y:4,threshold:0.500000,deadzone:0.500000"
      rstick\default=false
      rstick="axis_x:0,engine:sdl,guid:0300000034120000adbe000000000000,port:0,range:1.500000,pad:0,axis_y:1,threshold:0.500000,deadzone:0.500000"
      motionleft\default=false
      motionleft=[empty]
      motionright\default=false
      motionright=[empty]


      IP属地:广东3楼2023-06-14 23:36
      回复
        (续上一层)
        我不确定这个guid和你们一不一样,但大概率是不相同的。推荐你们自己配置一两个按键,然后在模拟器的\user\config\input目录下找到你自己的方案,双击看看这个guid是多少,然后把上面我的方案复制进去,替换所有的guid就行。
        完成后再次打开yuzu的按键设置,载入按键方案,看到的大概像这样:


        IP属地:广东4楼2023-06-14 23:41
        收起回复
          看样子6啊


          IP属地:上海5楼2023-06-14 23:46
          回复
            二、鼠标滑轮应用
            原来的mouse2joystick在适配botw的时候有滑轮切武器的快捷操作,相关脚本很容易魔改,例如:
            overwriteWheelUp:
            SetStick(0,0)
            ;IF (!alreadyDown){
            ; IF (vXbox)
            ; vstick.SetPOV(90)
            ; Else
            ; vstick.SetBtn(1,16)
            ; alreadyDown := True
            ; DllCall("Sleep", Uint, 250)
            ;}
            ;SetStick(-1,0)
            ;DllCall("Sleep", Uint, 30)
            ;SetStick(0,0)
            ;SetTimer, ReleaseDPad, -650 ; vstick.SetBtn(0,16)
            if(GetKeyState("1","P")=1 or GetKeyState("2","P")=1 or GetKeyState("3","P")=1){
            SetStick(-1,0)
            DllCall("Sleep", Uint, 30)
            SetStick(0,0)
            }else{
            vstick.SetBtn(1,13)
            DllCall("Sleep", Uint, 30)
            vstick.SetBtn(0,13)
            }
            Return
            overwriteWheelDown:
            SetStick(0,0)
            ;IF (!alreadyDown){
            ; IF (vXbox)
            ; vstick.SetPOV(90)
            ; Else
            ; vstick.SetBtn(1,16)
            ; alreadyDown := True
            ; DllCall("Sleep", Uint, 250)
            ;}
            ;SetStick(1,0)
            ;DllCall("Sleep", Uint, 30)
            ;SetStick(0,0)
            ;SetTimer, ReleaseDPad, -650 ; vstick.SetBtn(0,16)
            if(GetKeyState("1","P")=1 or GetKeyState("2","P")=1 or GetKeyState("3","P")=1){
            SetStick(1,0)
            DllCall("Sleep", Uint, 30)
            SetStick(0,0)
            }else{
            vstick.SetBtn(1,14)
            DllCall("Sleep", Uint, 30)
            vstick.SetBtn(0,14)
            }
            Return
            如上注释掉的就是原来的操作,改了之后,按住1或2或3的同时滑轮可以切换武器盾牌等,什么都不按的情况下,
            滑轮代表方向键上和下,这在用磁铁搬东西的时候可以滑轮前后移动加鼠标上下左右移动,就不需要手忙脚乱了。


            IP属地:广东7楼2023-06-14 23:53
            回复
              三、自己添加宏
              会写ahk就行。摇杆的命令主要是用到setstick,按键则是用的vstick.setBtn,另外还有个DllCall("Sleep", Uint, 数字)函数也是很有用的。
              如果你用的是notepad--或++,搜索overwriteWheelDown所有结果可以得到:

              这就是添加宏的所有秘密了,每次添加宏,就照着这几行复制修改。我常用的比如右侧跳:
              overwriteF:
              ;右侧跳
              SetStick(1,"N/A", True)
              vstick.SetBtn(1,3)
              DllCall("Sleep",Uint,30)
              SetStick(0,0,True)
              vstick.SetBtn(0,3)
              return
              但是,按键值我早忘光了,各位爱折腾的不妨试试总之就是这样了


              IP属地:广东8楼2023-06-15 00:04
              收起回复
                附上我自己改过的文件,里面残留了一些botw时期的脚本,请随便取用、自行更改:
                度盘前缀/s/1r4E1J_oM6IuEGZ47osC3vw?pwd=yuzu


                IP属地:广东9楼2023-06-15 00:13
                收起回复


                  IP属地:重庆10楼2023-06-15 10:20
                  回复
                    按键码列表:


                    IP属地:广东11楼2023-06-16 01:02
                    回复
                      楼主,之前玩botw的时候装了一个mouse2joystick是汉化的0.4.1.4版本,请问这个版可以直接用你改过的文件吗?
                      另外,如果我想将YB复制大法存成宏,应该怎么做呢?


                      IP属地:广东12楼2023-07-03 09:26
                      收起回复
                        其实yuzu键鼠模拟最不舒服的就是横向转向比较慢导致用起来不舒服,我用了520网站的一个mod直接(视野范围+弓箭过肩视角+灵敏度X2),解决转向慢问题,其他按键设置都和野炊一样就行了,高级里开启横向速度设置50就可以了,不愿意用mod横向速度设置60-70就能获得很好的体验,真的比安装2个新软件强,而且功能完全一样都是按特定键鼠标消失开始模拟视角,yuzu里设置键鼠选项就能改建,说白了yuzu就是把这俩软件的功能整合到模拟器而已


                        IP属地:山东13楼2023-07-03 10:09
                        收起回复
                          等等?这名字有点眼熟,大佬是不是曾经汉化过一款叫做"西部正义"的游戏啊?我好像在开始界面上看到过"涉川良"这个名


                          IP属地:浙江来自Android客户端14楼2024-03-25 14:10
                          收起回复
                            不太懂怎么编辑宏,比如一键风弹。。


                            IP属地:河南15楼2024-04-06 22:59
                            收起回复
                              我得yuzu识别不到mouse2joystick


                              IP属地:辽宁16楼2024-07-12 00:41
                              回复