因此,我正处于制作FPS游戏的初期阶段,并且我刚刚实现了冲刺和蹲伏功能(蹲下此刻只会减慢玩家的速度)。 函数就是这样:
private void sprintInput()
{
if (Input.GetKeyDown(sprintKey))
{
movementSpeed *= 2f;
}
if (Input.GetKeyUp(sprintKey))
{
movementSpeed /= 2f;
}
}
private void crouchInput()
{
if (Input.GetKeyDown(crouchKey))
{
movementSpeed /= 2f;
}
if (Input.GetKeyUp(crouchKey))
{
movementSpeed *= 2f;
}
}
尽管这样写,但显然可以同时激活它们。但我要蹲伏以覆盖sprint。因此,如果我同时使用sprint和蹲伏,则只会激活蹲伏。 我已经尝试了多种方法,但是没有任何效果,我确定我缺少明显的东西,我只是不知道。
答案 0 :(得分:2)
无论是否蹲伏,将布尔变量设置为true / false。
bool isCrouching;
private void crouchInput()
{
if (Input.GetKeyDown(crouchKey))
{
isCrouching = true;
movementSpeed /= 2f;
}
if (Input.GetKeyUp(crouchKey))
{
isCrouching = false;
movementSpeed *= 2f;
}
}
然后,您可以使用该变量来确保在冲刺之前不会蹲伏:
private void sprintInput()
{
if (!isCrouching && Input.GetKeyDown(sprintKey))
{
movementSpeed *= 2f;
}
if (!isCrouching && Input.GetKeyUp(sprintKey))
{
movementSpeed /= 2f;
}
}
仅当不使用蹲伏式var / button时,才可以激活sprinting修饰符。
答案 1 :(得分:0)
被接受的答案实际上在您的游戏中发挥了作用。玩家将按下sprint(速度x2),按下蹲伏(速度/ 2),释放sprint(什么都没有发生),然后释放蹲伏(速度x2),这将使他的速度永久加倍。
我认为更正确的方法将存储两个标志:
bool isCrouching, isSprinting;
float baseSpeed, movementSpeed;
private void sprintInput {
if (Input.GetKeyDown(sprintKey)) {
isSprinting = true;
UpdateSpeed ();
}
if (Input.GetKeyUp(sprintKey)) {
isSprinting = false;
UpdateSpeed ();
}
}
private void crouchInput {
if (Input.GetKeyDown(crouchKey)) {
isCrouching = true;
UpdateSpeed ();
}
if (Input.GetKeyUp(crouchKey)) {
isCrouching = false;
UpdateSpeed ();
}
}
private void UpdateSpeed () {
movementSpeed = isCrouching ? baseSpeed / 2
: isSprinting ? baseSpeed * 2
: baseSpeed;
}