是否可以在运行时设置多个控制器输入?

时间:2019-01-17 15:18:38

标签: c# unity3d input

注释

  • 我正在创建一个4人,多人游戏。
  • 我有4个相同的控制器,就像USB SNES控制器。
  • 所有控制器都能正常工作并投入大量精力。
  • 我希望该游戏可以在多种平台,设备等上运行。

这是问题所在:

当我开始游戏时,控制器会如下自动映射...

  • 播放器1:控制器1
  • 播放器2:控制器2
  • 播放器3:控制器3
  • 播放器4:控制器6

我假设如果更改控制器的插入顺序,或者在其他计算机/设备上运行该控制器,或者使用其他控制器等,则输入映射肯定不会自动映射到以上。

我的问题:

我确实有一个脚本来检测正在输入哪个控制器。 (例如JoyNum,这就是我发现播放器4是控制器6的方式)

鉴于此,是否可以在运行时设置Unity的默认“输入管理器”的JoyNums来进行补偿?

我的想法是创建一个屏幕,每个人都可以开始加入游戏。到那时,我将能够检测到所有控制器。 (例如,每个玩家是哪个JoyNum)。最后一步将是重新映射Unity的输入管理器。这可能吗?

谢谢!

PS:我在https://github.com/daemon3000/InputManager的Git上搜索并找到“自定义输入管理器”

但是,该项目没有建立,我也不知道如何实现。

1 个答案:

答案 0 :(得分:0)

因此,经过反复尝试,我想出了一个可行的解决方案。 (虽然可能不是最干净/推荐的方法)

步骤1)为输入管理器中的每个控制器(全部8个)添加每个操纵杆轴(全部28个)。 (脚本可以使此操作非常简单/省时)

第2步)创建自己的输入映射器。 (检测每个控制器的“上”和“左”。)

第3步)将这些结果保存到“ PlayerPrefs”文件中。

第4步)创建自己的输入检测脚本。 (唯一需要访问Unity的输入管理器的是“操纵杆轴”。)其他按钮可以通过从PlayerPrefs文件加载的(字符串)手动完成。

这种方法的优点:

  • 发挥全部作用。 (适用于任何控制器,设备,计算机等)
  • 非常稳定!
  • 允许最大程度地控制所有输入及其作用。

缺点:

  • 不得不做所有这一切似乎有点荒谬。
  • 相当耗时。 (但可以很容易地在以后的项目中再次使用)
  • 似乎草率,但效果很好。