新的输入系统不再触发任何东西

时间:2019-07-27 17:41:57

标签: c# unity3d

这篇帖子是我在Unity论坛上发布的帖子的无耻复制/粘贴:https://forum.unity.com/threads/input-system-doesnt-trigger-anything-anymore.717386/,但是Stack Overflow似乎更活跃

TL; DR:InputSystem几天前就工作了,别再触发任何东西了,暂停。

几天前,我尝试了新的输入系统,这真是太好了!我做了很多工作,试图了解使用它的最佳方法,最后,我的角色到处都是跳跃和移动,这太酷了!然后,我将代码合并到我们的开发分支中,上床睡觉。

今天,我想继续执行我的代码,但是我的角色不再移动,没有触发动作(即使在调试器中检测到输入),我真的不知道为什么。代码合并覆盖了一些重要的设置(我知道您在想什么,是的,“ Active Input Handling”设置在“ Both”上,我只尝试运行预览),或者在我的小测试中做了一些重要的事情,没意识到。

所以我决定尝试在一个新的新项目上重做我的步骤,也许你们可以帮我弄清楚我该怎么做?

1 /(通过集线器)创建一个新的2D项目

2 /安装最新的软件包(版本0.9.0)

3 /在该消息提示上单击“是”以激活设置中的新输入管理 Prompt

4 /重新启动Unity Editor,因为即使消息说它会重新启动并检查项目设置,它也不会重新启动(是的,它在“ Both”上,是的,我的脚本运行时版本是4.0) Settings

5 /创建一个新的GameObject并在其上添加一个PlayerInput

6 /单击“打开输入设置”,然后创建“ InputSettings”资产

7 /单击“创建动作...”以创建我的ActionMap资产

8 /在我的“玩家” ActionMap上创建一个“ TestAction”并将其设置为键“ t”

[ATTACH=full]457769[/ATTACH]

9 /创建一个新脚本“ TestScript”,其中包含一个OnTestAction()方法(仅记录“ test”)并启用测试映射/操作(请确保):

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.PlayerInput;

public class TestScript : MonoBehaviour
{
    void Start()
    {
        InputActionMap playerActionMap = GetComponent<PlayerInput>().actions.GetActionMap("Player");
        playerActionMap.Enable();
        playerActionMap.GetAction("TestAction").Enable(); //Just to be sure
    }

    public void OnTestAction()
    {
        Debug.Log("test");
    }
}

10 /像疯子一样按下“播放”并向其发送垃圾邮件“ T”以尝试显示调试(请注意,在调试器中,创建了一个User,检测到我的“ t”次按下,我的TestAction存在并被映射在“ t”键上,但未显示调试 Debug

这可能是一个愚蠢的问题,但它使我发疯,我该怎么办?几天前它的工作真是令人生气!

其他信息: -将输入管理从“两者”切换到“新输入系统(预览)”没有任何作用 -检查Update()是否启用了我的操作,每帧返回“ True” -检查Update()是否触发了我的动作,每帧返回“ False” -使用action.started / triggered / performed不会执行任何操作(我也尝试为此切换到UnityEvent或C#事件):

public class TestScript : MonoBehaviour
{
    InputAction a;

    void Start()
    {
        InputActionMap playerActionMap = GetComponent<PlayerInput>().actions.GetActionMap("Player");
        playerActionMap.Enable();
        a = playerActionMap.GetAction("TestAction");
        a.Enable(); //Just to be sure
        a.started += OnTriggeredTestAction;
        a.performed += OnTriggeredTestAction;
        a.canceled += OnTriggeredTestAction;
    }

    public void OnTestAction()
    {
        Debug.Log("test");
    }

    public void OnTriggeredTestAction(InputAction.CallbackContext ctx)
    {
        Debug.Log("test triggered");
    }
}
  • 直接注入TestAction的InputActionReference并使用它无作用
  • 强制“默认控制方案”和“默认操作图”不起作用
  • 使用BroadcastMessage或UnityEvents不起作用

3 个答案:

答案 0 :(得分:1)

我不知道这是否对您有用,但对我有用,而且我遇到了同样的问题。

我创建了 2 个控制方案。手机和电脑。移动设备需要触摸屏,PC 需要键盘和鼠标。这样做使我的移动输入事件停止触发。因此,将游戏手柄添加到我的移动控制方案允许事件再次触发。

TLDR。检查您的控制方案,确保它允许您绑定到的输入。

答案 1 :(得分:0)

至少从Unity 2020.1.2和输入系统1.0.0起,输入系统将随机停止正常工作。我知道的唯一解决方法是restarting Unity

答案 2 :(得分:0)

您可能尝试导入新的输入系统包以兼容多个输入设备。这些类型的错误是由于新旧输入系统包之间的冲突引起的,可能会在最新更新中得到解决。

要解决此问题,请转至编辑 -> 项目设置->播放器->其他设置 > 在配置下是主动输入处理选项。选择Both。 Unity 将重新启动。现在你的问题应该解决了。您将能够同时使用旧的输入系统包和新的输入系统包。