统一C#bool和时间设置为false。。。。?

统一C#bool和时间设置为false。。。。?,c#,boolean,unity5,C#,Boolean,Unity5,这是我的代码: if ( run && Input.GetKeyDown (KeyCode.K)) { anim.SetInteger ("State", 4); slide = true; } if (Input.GetKeyUp (KeyCode.K)) { slide = false; anim.SetInteger ("State", 0); } 我的问题是:如果我拿着(KeyCode.K),那么幻灯片仍然是true,这是我不想要的 我

这是我的代码:

if ( run && Input.GetKeyDown (KeyCode.K)) {
    anim.SetInteger ("State", 4);
    slide = true;
}

if (Input.GetKeyUp (KeyCode.K)) {
    slide = false;
    anim.SetInteger ("State", 0);
}
我的问题是:如果我拿着(
KeyCode.K
),那么
幻灯片仍然是
true
,这是我不想要的

我只需将幻灯片设置为
true
一次,或仅在2秒钟后设置为
false


我希望你们都明白我想要什么。

我建议制作一个属性,用于设置整数:

public bool Slide
{
    get { return slide; }
    set
    {
        if ( value == slide ) return;

        slide = value;

        if( slide ) anim.SetInteger("State", 4);
        else anim.SetInteger("State", 0);
    }
}
许多可能的选项之一是创建一个只将标志重置回
false
Coroutine

IEnumerator StartSlide()
{
    const float MAX_TIME = 2.0f; // time to wait before resetting the flag
    Slide = true;
    float timeNow = 0.0f;
    while ( timeNow < MAX_TIME && Slide )
    {
       timeNow += Time.deltaTime;
       yield return new WaitForEndOfFrame();
    }
    Slide = false;
}
您还可以将其与
GetKeyUp
方法一起使用:

if ( Input.GetKeyUp(KeyCode.K) && Slide )
{
    Slide = false;
}

谢谢你建议我使用“协同程序”。
if ( Input.GetKeyUp(KeyCode.K) && Slide )
{
    Slide = false;
}
void Update{

    if ( key_K && run && Input.GetKeyDown (KeyCode.K)) {
            key_K = false;

            StartCoroutine ("coRoutine_keyK");

        }

}


IEnumerator coRoutine_keyK(){
        slide = true;
        anim.SetInteger ("State", 4);
        yield return new WaitForSeconds (0.5f);

        slide = false;
        anim.SetInteger ("State", 0);

        key_K = true;
    }