2016-12-24 378 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

是的,工作完美! –