[英]Not sprint while crouching?
因此,我正處於制作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和蹲伏,則只會激活蹲伏。 我嘗試了多種方法,但沒有任何效果,我確定我遺漏了一些非常明顯的東西,我只是不知道什么。
是否蹲伏,將布爾變量設置為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修飾符。
接受的答案實際上在您的游戲中發揮了作用。 玩家將按下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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.