使用Input.GetKey按键多次返回true

时间:2016-11-21 16:14:06

标签: c# unity3d

我在激活和取消激活对象时遇到unity3d中的问题。我想在按一个键时启用该对象,并在再次按下时禁用它。

我认为我的代码很好。但它无法正常工作。当我第一次按下按钮时,对象被激活,然后立即停用,有时候按键工作很好。我认为这是因为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;
            }
        }
    }           
}

1 个答案:

答案 0 :(得分:4)

使用GetKeyDown只会在帧中出现一次,直到重新启动并再次按下。 GetKey在按下时会返回true。这将使它不止一次被触发,使if语句成为真,并在一帧中多次执行。

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