统一C#bool并按时间设置错误....?

时间:2017-03-30 10:37:04

标签: 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)而slide仍然true我不想要。

我只需将slide设为true一次,或仅在2秒后设为false

我希望你们都明白我的意思。

2 个答案:

答案 0 :(得分:0)

我建议将slide作为设置整数的属性:

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

        slide = value;

        if( slide ) anim.SetInteger("State", 4);
        else anim.SetInteger("State", 0);
    }
}

许多可能的选项之一是创建Coroutine,只将标志重置为false

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

要使用此功能,您可以致电:

if ( run && Input.GetKeyDown(KeyCode.K) && !Slide )
{
     StartCoroutine(StartSlide());
}

您也可以使用GetKeyUp方法:

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

答案 1 :(得分:0)

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