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