简体   繁体   English

有人知道C#Unity3D中的if语句出了什么问题吗?

[英]Does someone know what's wrong in my if statement in C# Unity3D?

I want to change the int speed value, but it doesn't work. 我想更改int速度值,但是不起作用。 Can someone help me? 有人能帮我吗? If you too have too few information, pls ask me. 如果您的信息太少,请问我。 This is my code: 这是我的代码:

    if (Input.GetKeyDown (KeyCode.W)) {
        sprint1 = true;
    } else if (Input.GetKeyUp(KeyCode.W)){
        sprint1 = false;
    } 
    if (Input.GetKeyDown(KeyCode.LeftShift)){
        sprint2 = true;
    } else if (Input.GetKeyUp(KeyCode.LeftShift)){
        sprint2 = false;
    }
     if (sprint2 == false && Input.GetKeyUp(KeyCode.W) && Input.GetKeyUp(KeyCode.A) && Input.GetKeyUp(KeyCode.S) && Input.GetKeyUp(KeyCode.D)){
        speed = 0;
    } if (sprint2==false && (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))){

        speed = 4;

    }if (sprint1 == true && sprint2 == true && Scoped==true) {
        speed = 8;
    }
if (sprint2 == false && Input.GetKeyUp(KeyCode.W) && Input.GetKeyUp(KeyCode.A) && Input.GetKeyUp(KeyCode.S) && Input.GetKeyUp(KeyCode.D)){
    speed = 0;
}

You will never enter in this particular case except if, during the exact same frame, you release W, A, S and D. Look at the Input.GetKeyUp documentation : 除非在完全相同的帧中释放W,A,S和D,否则将永远不会输入这种特殊情况。请查看Input.GetKeyUp文档

Returns true during the frame the user releases the key identified by the key KeyCode enum parameter. 在用户释放由key KeyCode枚举参数标识的帧期间,返回true。

You should organise it this way instead: 您应该这样组织:

// If you are sprinting, set the speed to 8
if (sprint1 == true && sprint2 == true && Scoped==true) {
    speed = 8;
}
// Else if one of those keys has been touched during this frame, set the speed to 4
else if (sprint2==false && (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D))){
    speed = 4;
}
// Else, just set the speed to 0
else
    speed = 0;

If a key isn't down, it's up. 如果按键没有按下,则表示向上。 No need to check for both. 无需同时检查两者。 Anyway, this is the way I interpret your if. 无论如何,这就是我解释你是否的方式。

sprint1 = Input.GetKeyDown(KeyCode.W);
sprint2 = Input.GetKeyDown(KeyCode.LeftShift);

if (sprint2)
{
   if (sprint1 && Scoped)
        speed = 8;
     else
        speed = 4; // do you want speed 0 or 4 if either of these others are false
}
else
{
    if (sprint1
     || Input.GetKeyDown(KeyCode.A) 
     || Input.GetKeyDown(KeyCode.S) 
     || Input.GetKeyDown(KeyCode.D))
        speed = 4;     
    else
        speed = 0; 
}

What I think would work better, if I'm interpreting your desire, is 如果我解释您的愿望,我认为会更好的是

sprint1 = Input.GetKeyDown(KeyCode.W);
sprint2 = Input.GetKeyDown(KeyCode.LeftShift);

if (sprint1 && sprint2 && Scoped)
     speed = 8;
else if (sprint1
     || Input.GetKeyDown(KeyCode.A) 
     || Input.GetKeyDown(KeyCode.S) 
     || Input.GetKeyDown(KeyCode.D))
    speed = 4;     
else
    speed = 0; 

Here is a way of doing it so you don't have to make all these unnecessary flags for sprint. 这是一种方法,因此您不必为sprint做所有这些不必要的标记。

    if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftShift) && Scoped)
        speed = 8;
    else if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.S))
        speed = 4;
    else
        speed = 0;

I have fixed my own issue. 我已经解决了自己的问题。 Thanks for all your comments, but I wanna show you my solution: 感谢您的所有评论,但我想向您展示我的解决方案:

     if (Input.GetKey (KeyCode.W)) {
        sprint1 = true;
    } else {
        sprint1 = false;
    }
    if (Input.GetKey (KeyCode.LeftShift)) {
        sprint2 = true;
    } else {
        sprint2 = false;
    }
    if (sprint2 == false && sprint1==false && !(Input.GetKey (KeyCode.A)) && !(Input.GetKey (KeyCode.S)) && !(Input.GetKey (KeyCode.D))){
        speed = 0;
    } if ((sprint1==true && sprint2==false) || Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.S) || Input.GetKey (KeyCode.D)){

        speed = 4;

    }if (sprint1 == true && sprint2 == true && Scoped==true) {
        speed = 8;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM