Unity“组合”操纵杆输入,但仅当两个控制器具有相同的名称时

时间:2019-03-03 19:19:45

标签: c# unity3d

我遇到的问题有点难以解释,因此,如果我在这里详细介绍一下,我深表歉意。

我在游戏中创建了一个系统,该系统使用Unity输入管理器根据插入的控制器数量为每个玩家分配控件。该系统已经运行了几个月,在多达4个控制器上进行了测试一段时间,没有问题。

今天,我插入了2个Xbox One控制器,并尝试玩最新版的游戏。显然,过去在相同的设置下就可以使用。

在尝试移动操纵杆1时,输入管理器未检测到任何输入。但是,如果您稍微移动操纵杆2上的任何轴,它就会开始“合并”两个控件的输入,因此您必须使用两个操纵杆以使Input Manager看到输入,即使这样它也无法正常工作正确地,结果大大落后于输入。

我还发现,在游戏开始时这是排他性的。如果我等到游戏加载完毕,然后再插入控制器,Unity会很好地读取它们。

在创建游戏之前,可以在Unity编辑器中以类似的方式工作。如果在加载编辑器时同时插入了两个控制器,则问题完全相同。但是,如果我在编辑器启动后但在点击“播放”之前插入它们,它们的功能就很好。

最后,据我所知,只有控制器名称相同时,它才会发生。在游戏取消之前,我插入了PS3控制器和Xbox 1控制器之一,而PS3和Xbox One控制器的功能均与预期一致。

我创建了一个新场景,唯一的代码是这里列出的代码,我一直在使用它来测试此问题:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AxisTestScript : MonoBehaviour
{
    public Renderer joystick1axis1P;
    public Renderer joystick1axis1N;
    public Renderer joystick1axis2P;
    public Renderer joystick1axis2N;
    public Renderer joystick2axis1P;
    public Renderer joystick2axis1N;
    public Renderer joystick2axis2P;
    public Renderer joystick2axis2N;

    public Material onMaterial;
    public Material offMaterial;
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{

    if (Input.GetAxis("Joystick1Axis1") > 0)
        joystick1axis1P.material = onMaterial;
    else
        joystick1axis1P.material = offMaterial;
    if (Input.GetAxis("Joystick1Axis1") < 0)
        joystick1axis1N.material = onMaterial;
    else
        joystick1axis1N.material = offMaterial;
    if (Input.GetAxis("Joystick1Axis2") > 0)
        joystick1axis2P.material = onMaterial;
    else
        joystick1axis2P.material = offMaterial;
    if (Input.GetAxis("Joystick1Axis2") < 0)
        joystick1axis2N.material = onMaterial;
    else
        joystick1axis2N.material = offMaterial;

    if (Input.GetAxis("Joystick2Axis1") > 0)
        joystick2axis1P.material = onMaterial;
    else
        joystick2axis1P.material = offMaterial;
    if (Input.GetAxis("Joystick2Axis1") < 0)
        joystick2axis1N.material = onMaterial;
    else
        joystick2axis1N.material = offMaterial;
    if (Input.GetAxis("Joystick2Axis2") > 0)
        joystick2axis2P.material = onMaterial;
    else
        joystick2axis2P.material = offMaterial;
    if (Input.GetAxis("Joystick2Axis2") < 0)
        joystick2axis2N.material = onMaterial;
    else
        joystick2axis2N.material = offMaterial;
}
}

我未更改的输入管理器,looks like this和 其他输入均按照相同的模式进行设置。

Unity和Windows均已完全更新,尽管我还没有机会在另一台计算机上进行测试。

我相信这涵盖了所有内容。那么,我可能不小心打开了统一或窗口中的某些设置吗?当统一在启动过程中检测到控制器时,这与它有关系吗?

请帮助!

0 个答案:

没有答案