c# - 试图在 Unity 中禁止横向和向后冲刺
问题描述
我有一个可以很好地移动的世界中的玩家。当玩家按下 shift 键时,速度会增加。我有一种方法可以检查 sprint,但if
我使用的方法似乎不起作用。玩家可以向任何方向冲刺。
void CheckForSprint()
{
if (Input.GetKeyDown(KeyCode.LeftShift) && !Input.GetKeyDown(KeyCode.S) && !Input.GetKeyDown(KeyCode.A) && !Input.GetKeyDown(KeyCode.D))
{
speed = 6;
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
speed = 3;
}
}
解决方案
使用您在问题中添加的代码。
您提到了键“A”、“S”和“D”,但没有包括“W”。我相信您尝试以 6 速度移动角色以防玩家按下LeftShift
(可能是您的运行按钮)和W
,但忽略LeftShift
它向左、向右或向后移动的情况(它将以 3 速度移动)。
如果是这种情况,并且您想以 3 的速度移动以防万一W
,按S
OR D
,您应该使用的是Input.GetButton
代替GetButtonDown
。原因:
- GetButton:当 buttonName 标识的虚拟按钮被按住时返回 true。
- GetButtonDown:在用户按下由 buttonName 标识的虚拟按钮的帧期间返回 true。
因此 GetButtonDown 将仅在用户按下键的帧期间返回 true。但持有时会忽略。检查这个
所以试着用这种方式写条件:
if (Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D))
{
speed = 6;
} else {
speed = 3;
}
推荐阅读
- ios - 在 Publisher 上执行副作用
- python-3.x - 使用 tensorflow 和 keras 如何找到给定字符串的“类别”
- python - Python Paramiko 通过 SSH 将多个文件下载到窗口客户端
- flutter - Flutter ModalBottomSheet 状态(单选按钮)
- node.js - 如何使用 Node.js 创建 SMS API
- python - 生成不包括某些值的随机整数
- angular - 角度材料中的日期格式在一个页面中有效,在另一个页面中无效
- c++ - C/C++ 错误,collect2.exe: error: ld returned 1 exit status
- javascript - 删除重复键并组合 JavaScript 数组中的唯一值
- flutter - 在颤动的文件夹中为每个循环做一个