gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:13:31 25 4
gpt4 key购买 nike

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

TL;DR : InputSystem 几天前工作了,不要再触发任何东西了,停下来。

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

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

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

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

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

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

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

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

6/点击“Open Input Settings”并创建一个“InputSettings” Assets

7/点击“Create Actions...”来创建我的 ActionMap Assets

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

[ATTACH=full]457769[/ATTACH]

9/创建一个新脚本“TestScript”,其中包含一个 OnTestAction() 方法(仅记录“test”)并启用测试 map / Action (只是为了确定):

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”以尝试显示调试(请注意,在调试器中,创建了一个用户,检测到我的“t”按下,我的 TestAction 存在并映射到“t"键但不显示调试
Debug

这可能是一个愚蠢的问题,但它让我发疯,我做错了什么?更令人气愤的是,它在几天前就起作用了!

附加信息 :
- 将输入管理从“两者”切换到“新输入系统(预览版)没有任何作用
- 检查 Update() 是否启用了我的操作,每帧返回“True”
- 检查更新()是我的 Action 被触发返回“假”每一帧
- 使用 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");
}
}
  • 直接注入(inject)我的 TestAction 的 InputActionReference 并使用它什么都不做
  • 强制“默认控制方案”和“默认操作映射”没有任何作用
  • 使用 BroadcastMessage 或 UnityEvents 不起作用
  • 最佳答案

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

    关于c# - 新的输入系统不再触发任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234615/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com