[脚本] unity怎么实现键盘与PS4和XBOX手柄游戏手柄同时支持?
未解决
38
楼主悬赏蛮牛币


本人美工小白刚做的的游戏,对于C#一窍不通,请问程序员大佬,能否帮忙写个脚本?可以是有偿的,本人有PS4手柄,当然也可以支持xbox360手柄
目前游戏是 使用键鼠控制的!


希望是当手柄链接之后可以使用手柄控制,同时也可以使用键鼠控制,这样的构想是否可行?


本人在百度等苦苦寻找遗憾的是都是程序员才能明白的,本人一窍不通只会做一些场景模型,本人学习unity有几年了,但只是对于场景设计而已


希望大佬给与帮助,可以支持远程协助,可以通过向日葵 远程协助,也可以通过VX等




我来回答
  • 沙发 白侠
  • 2021-4-27 17:32:29
emmmm刚刚最近做了一个Sony手柄的项目,反正我做的只能支持一个,同时支持还没有试过
  • 板凳 白侠
  • 2021-4-27 17:33:45
为啥你只做场景设计还要搞这个鬼玩意???
  • 地板 Meyu
  • 2021-5-11 11:39:29
我也是小白,新做的游戏也遇到同样的问题,就分享下经验吧。先答主要的问题,关于同时支持键盘和手柄,其实应该本身并不冲突,如果是本身的input manager ,例如下:
if(Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.JoystickButton0)) //这样应该就是按下键盘A键和手柄JoystickButton0映射的键都可以执行,有点忘了
{
    print(\"1\");
}
但是同时支持ps4和xbox就麻烦很多,因为unity本身的input manager的映射名称很坑爹,你应该也查到过,同一个编号名称在不同手柄是不同的键。
有一句代码Input.GetJoystickNames()可以获取到当前连接的手柄名称列表,下面是我用的方法,大致的相关代码:

public string[] JoyStickNames;

void Update()
{
        JoyStickNames = Input.GetJoystickNames();
        for (int x = 0; x < JoyStickNames.Length; x++)
        {
            if (JoyStickNames[x] != \"\")
            {
                if (JoyStickNames[x].Contains(\"Xbox\") || JoyStickNames[x].Contains(\"XBOX\")) //这个语句意思是获取的手柄名称里 包含了 Xbox或者XBOX这几个字
                {
                       print(\"连接了xbox手柄\");            
                }
                else if (JoyStickNames[x].Contains(\"Wireless\") //ps4的手柄名称默认是无线手柄的英文,没有ps的字样
                {
                        print(\"连接了ps4手柄\");            
                }
        
}

判断了手柄之后又再更换按键映射的名称,对应到不同手柄的相同的键,很麻烦,非常不推荐。

对于手柄适配,比较建议用插件辅助做或者unity新的input  System,都有可视化的编辑界面,比纯写代码好得多,也对非程序员更加友好,B站油管也有相关的教学视频。

插件比较主流的叫Rewired,在unity asset store里45美金,用插件可以支持手柄震动,因为unity本身貌似一直没有这个,并且插件本身支持了足够多的控制器,远不止ps4和xbox。这个插件可以跟input manager共用,代码也跟input manager用法一样,看一下插件的文档或者网上查查大致就可以了。

unity新的input  System,之前试过一下,大众的手柄都支持,而且编辑界面有一定省去写代码的作用,就是可以选哪个键触发的哪些功能,可以不在代码里再写if (Input啥啥键)的那些,不过也就方便一点点,但是不能跟input manager共用,而且还是新版本的测试功能,会有很多坑爹的问题。

而且最重要的,以上两者对于手柄按键有重新的映射,都通过按键的位置来映射,比如说按肩键1肩键2来映射,而不是像原本的input manager那样JoystickButton0123465789的编号,就不需要再自己判断插入的是ps4还是xbox手柄然后再换不同的按键编号了。

同时写两套输入程序就行了。
好像在界面也能调整,可以在界面上找找
  • 7# vison
  • 2021-5-19 09:28:30
用一个插件就好了啊,rewind
  • 8# vison
  • 2021-5-19 09:31:53
rewired 打错了
unity 插件 Input System 了解一下,支持多个平台手柄,移动设备,Pc 等,它是个映射关系,对于硬件设备检测执行了封装,我们无需考虑过多,非常简单
8888888888888888888888888888888888888888888888888888888888888888888
学习一下
引用: 绝世love情缘 发表于 2021-5-24 17:48
unity 插件 Input System 了解一下,支持多个平台手柄,移动设备,Pc 等,它是个映射关系,对于硬件设备检 ...

大佬,InputSystem 里出现了不支持的设备怎么让它支持啊。。。InputDebug窗口里
引用: 弱智的小毛驴 发表于 2021-6-15 10:47
大佬,InputSystem 里出现了不支持的设备怎么让它支持啊。。。InputDebug窗口里 ...

查看它的文档,支持什么设备,不支持的设备就是不支持了呀~~~比如你拿一个国产不知名山寨手柄,必然可能出现不支持呀~~XboxPsSwtich 手柄足够你玩了嘛,何况他们世界通用
引用: 绝世love情缘 发表于 2021-6-15 11:44
查看它的文档,支持什么设备,不支持的设备就是不支持了呀~~~比如你拿一个国产不知名山寨手柄,必然可能 ...

我猜的不支持的原因大概是untiy本身通用的layout 不支持我的设备(罗技的外接设备),但是英文能力有限,实在琢磨不清楚自定义设备该怎么整。。哈哈,所以想看大佬有没有什么好的解决方法
引用: 弱智的小毛驴 发表于 2021-6-15 17:19
我猜的不支持的原因大概是untiy本身通用的layout 不支持我的设备(罗技的外接设备),但是英文能力有限, ...

你要不给我邮寄一套设备,我试试~~{:94:}
12下一页