这是我的代码:
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
。
我希望你们都明白我的意思。
答案 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;
}