2016-11-21 261 views
1

激活和取消激活对象时,我遇到了unity3d中的问题。我想在按下某个按键时启用该对象,并在再次按下该按键时将其禁用。带有Input.GetKey的按键多次返回true

我想我的代码很好。但它不能正常工作。当我第一次按下按钮时,对象被激活,然后立即关闭有时按下按键的工作有时不好。我认为这是因为Update()函数,它运行在每一帧。我不知道我在做什么。

代码:

public class A : MonoBehaviour 
{ 
    [SerializeField] 
    private GameObject invSystem; 
    [SerializeField] 
    bool buttonCheck; 

    void Update() 
    { 
     if (Input.GetKey(KeyCode.P)) 
     { 

      if (!buttonCheck) 
      { 
       invSystem.SetActive(true); 
       buttonCheck = true; 
      } 

      else 
      { 
       invSystem.SetActive(false); 
       buttonCheck = false; 
      } 
     } 
    }   
} 

回答

4

使用GetKeyDown直到relased并再次按下一个框架,这将仅是真的只有一次。 GetKey当它被按下时,它会恢复正常。这将使其被触发不止一次,使您的if语句成为真实并在一帧中执行多次。

if (Input.GetKey (KeyCode.P))应替换为if (Input.GetKeyDown(KeyCode.P))