【发布时间】:2021-09-25 09:21:46
【问题描述】:
我正在开发一款 2D 游戏,并且正在使用新的 Unity3D 输入系统。
我的步行工作正常。
基本上,我得到随 A 和 D 变化的输入浮点数,以朝着应有的方向前进。 然后我将带有命令的浮点数发送到移动脚本以移动。
我遇到的问题是,当我还按住运行按钮 (Z) 并且我仍在行走(按 A - D)时,我仍在以该速度行走并且在我释放之前不会改变速度步行按钮。
如果我在走路前按住运行按钮 (Z),那么它就会运行。 但我想边走边跑。
我当前的代码:
private InputAction movementInput, runInput;
private bool isRunning;
private void Awake()
{
movementInput.performed += context => OnMove(context);
movementInput.canceled += context => OnMove(context);
runInput.performed += context => this.isRunning = true;
runInput.canceled += context => this.isRunning = false;
}
private void OnMove(InputAction.CallbackContext context)
{
if(!isRunning)
{
movementComponent.move(mySpriteRenderer, context.ReadValue<float>());
Debug.Log("NotRunning");
}
else
{
movementComponent.run(mySpriteRenderer, context.ReadValue<float>());
Debug.Log("Running");
}
}
所以在走路时按住 Z 按钮跑步(按 A 或 D)后,我没有收到“正在运行”调试。 如果我停止并释放 A 和 D 按钮,按住 Z 按钮,然后按 A 或 D,然后我会收到“正在运行”调试,但如果我在仍然按住 A 或 D 的同时释放它,它仍在运行。
它似乎创建了移动调用开始时值的快照,然后忽略了在那段时间发生的所有变化。
【问题讨论】:
标签: c# unity3d input controller 2d