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

时间:2017-04-04 13:57:26

标签: c# if-statement unity3d

我想更改int速度值,但它不起作用。有人能帮我吗?如果您的信息太少,请问我。 这是我的代码:

    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;
    }

4 个答案:

答案 0 :(得分:2)

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

除非在完全相同的帧中释放W,A,S和D,否则您将永远不会进入此特定情况。请查看Input.GetKeyUp documentation

  

在框架中返回true ,用户释放由Key Key Key key参数标识的密钥。

你应该用这种方式组织它:

// 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;

答案 1 :(得分:0)

如果一个键未关闭,它就会启动。无需检查两者。无论如何,这是我解释你的方式。

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; 
}

如果我正在解释你的愿望,我认为更好的是

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; 

答案 2 :(得分:0)

这是一种方法,因此您不必为sprint制作所有这些不必要的标志。

  @ViewChild('someComponent') child: SomeComponent;

  ngAfterViewInit() {
     this.child.queryTheDomElementFor('some tag');
     this.child.getDomElementThatContains('specific Content');
     this.child.setCss(this.child.someNode, 'css rules');
  }

答案 3 :(得分:0)

我已经解决了自己的问题。 感谢您的所有评论,但我想向您展示我的解决方案:

     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;
    }