2016-12-24 502 views
-3

我试图从“空格”按钮获取输入,但它看起来像点击时没有输入。这里是我的代码:Input.GetKeyDown无法正常工作

void OnTriggerEnter2D (Collider2D other) 
{ 
    if (other.gameObject.tag == "GreenKey") { 
     print ("Green Key taken"); 
     Destroy (other.gameObject); 
     greenKey_canvas.enabled = true; 
    } else if (other.gameObject.tag == "RedKey") { 
     print ("Red Key taken"); 
     Destroy (other.gameObject); 
     redKey_canvas.enabled = true; 
    } else if (other.gameObject.tag == "YellowKey") { 
     print ("Yellow Key taken"); 
     Destroy (other.gameObject); 
     yellowKey_canvas.enabled = true; 
    } else if (other.gameObject.tag == "Gem") { 
     print ("Gem taken"); 
     gems = gems + 5; 
     gemsText.text = gems.ToString(); 
     Destroy (other.gameObject); 
    } else if (other.gameObject.tag == "RedGem") { 
     print ("Gem taken"); 
     gems++; 
     gemsText.text = gems.ToString(); 
     Destroy (other.gameObject); 
    } else if (other.gameObject.tag == "LiveTaker") { 
     lives--; 
    } else if (other.gameObject.tag == "RedDoor") { 
     if (redKey_canvas.enabled) { 
      if (Input.GetKeyDown(KeyCode.Space)) { 


      //OPEN DOOR 
      other.gameObject.GetComponent<SpriteRenderer>().sprite = enterDoor; 
      redKey_canvas.enabled = false; 
      } 
     } 
    } else if (other.gameObject.tag=="YellowDoor") { 
     if (yellowKey_canvas.enabled) { 
      //OPEN DOOR 
     } 
    } else if (other.gameObject.tag=="GreenDoor") { 
     if (greenKey_canvas.enabled) { 
      //OPEN DOOR 
     } 
    } 
} 

在控制台中,我得到了“进入门钥匙”的消息,但是当我按空格,没有任何反应。

我也试着给轴添加到名为“DoorEnter”输入管理器,但它不工作,要么...

+0

您可能需要发布包含此代码或甚至整个代码的完整功能。这很难帮助。 – Programmer

+0

刚刚编辑@Programmer –

回答

4

的原因,这dosent工作,就是OnCollisionEnter功能只有激活首先发生碰撞的框架,并且GetKeyDown只会启动按钮被按下的单个框架。

一个相当丑陋的修复方法是将GetKeyDown替换为GetKey,然后在走进门时已经占据空间。

更好的解决方案是在Update循环中为if语句添加一个变量。使用户进入时激活,当用户离开冲突区域时停用。

然后再做一个,如果这样的语句:

if(inCollider && Input.GetKeyDown(KeyCode.Space)){ 
//Open door here 
} 

而且,任何人都可以格式化这是否正确? (Am on phone)

编辑:碰撞意味着触发!抱歉!

+0

是的,工作完美! –