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

TL;DR:输入系统几天前工作了,不再触发任何东西,暂停。

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

今天,我想继续我的代码,但是我的角色不再移动,操作也没有被触发(即使在调试器中检测到输入),我真的不知道为什么。要么代码合并覆盖了一些重要的设置(我知道你在想什么,是的,“主动输入处理”设置为“两者”,我尝试只运行预览),要么我在小测试期间做了一些重要的事情,但我没有意识到。

所以我决定尝试在一个全新的项目上重现我的步骤,也许你们可以帮助我弄清楚我做错了什么?

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

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

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

http://img2.sycdn.imooc.com/64bb88330001df2003860176.jpg

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

http://img2.sycdn.imooc.com/64bb884c0001f79409380181.jpg

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

6/ 单击“打开输入设置”并创建一个“InputSettings”资源

7/ 单击“创建操作...”来创建我的 ActionMap 资源

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

http://img3.sycdn.imooc.com/64bb885b0001b23612070578.jpg

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/像疯子一样按下&ldquo;Play&rdquo;并发送&ldquo;T&rdquo;来尝试显示调试(请注意,在调试器中,创建了一个用户,检测到我的&ldquo;t&rdquo;按下,我的 TestAction 存在并映射到&ldquo;t&rdquo;键上,但没有显示调试


http://img1.sycdn.imooc.com/64bb8878000156fa19181034.jpg

HUX布斯
浏览 147回答 5
5回答

交互式爱情

您可能尝试导入新的输入系统包以实现多个输入设备的兼容性。这些类型的错误是由于新旧输入系统包之间的冲突造成的,并且可能在最新的更新中得到解决。要解决此问题,请转到“编辑” -> “项目设置” -> “播放器”-> “配置”下的“其他设置”下的“活动输入处理”选项。选择两者。Unity 将重新启动。现在你的问题应该解决了。您将能够同时使用旧的输入系统包和新的输入系统包。

繁星coding

在输入调试器中检查是否存在恶意用户我有非常相似的症状(输入系统会随机停止发送回调)。当我打开输入调试器时,它正在注册按键,但我的脚本中从未调用回调。重新启动 Unity 没有帮助。重新启动没有帮助。我还在输入调试器中发现输入系统中有 2 个“用户”,并且(通过一次禁用场景中一个游戏对象的过程)发现我不小心将输入动作资源的另一个副本附加到场景中的另一个游戏对象,并且 Unity 将此另一个对象注册为第二个玩家或“用户”,它被分配了我试图捕获的所有输入动作绑定。流氓操作资产本质上是拦截操作,防止在预期脚本上调用回调。我不知道这是否是您的特定问题,但也许它会帮助其他人(像我一样)花费数小时浏览论坛,寻找解决这个难以捉摸的问题的方法。判断您是否遇到相同问题的一个简单方法是打开输入调试器并查看所需的操作是否实际映射到感兴趣的用户。输入调试器的屏幕剪辑:对我来说,有一个意外的用户#1,并且只有一个用户(不是预期的用户)实际上拥有绑定到所需操作的密钥

Cats萌萌

发布以防其他人遇到这个问题,因为这解决了我的问题。确保调用 Enable() 来启动路由事件。//Create a and set the referenceprivate InputControls _inputMapping;private void Awake() => _inputMapping = new InputControls();//Route and Un-route eventsprivate void OnEnable() => _inputMapping.Enable();private void OnDisable() => _inputMapping.Disable();

大话西游666

我遇到了类似的问题,完全按照问题中描述的步骤重现。就我而言,我忘记设置控制方案。添加后问题就解决了。为此:打开您的输入操作资产。在左上角选择一个控制方案。(例如,键盘)(如果您一开始就没有添加控制方案,您的问题可能与我的不同)右键单击> 编辑控制方案。 单击加号将控制方案添加到列表中。选择您要添加的控制方案。(在本例中为键盘) 你已经准备好了。保存所有内容,问题就应该得到解决。玩你的游戏,它应该可以工作。

芜湖不芜

我不知道这是否对你有用,但它对我有用,而且我也遇到了同样的问题。我创建了 2 个控制方案。手机和电脑。移动设备需要触摸屏,PC 需要键盘和鼠标。这样做使我的移动输入事件停止触发。因此,将游戏手柄添加到我的移动控制方案中可以让事件再次触发。太长了。检查您的控制方案,确保它允许您绑定的输入。
打开App,查看更多内容
随时随地看视频慕课网APP