Input.GetKeyDown不工作

时间:2016-12-24 16:57:42

标签: unity3d

我正在尝试从“空格”按钮获取输入,但看起来我点击时不接受输入。这是我的代码:

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
        }
    }
}

在控制台中,我收到“带钥匙进门”的消息,但当我按空格键时,没有任何反应。

我还尝试将Axis添加到名为“DoorEnter”的输入管理器中,但它也不起作用...

1 个答案:

答案 0 :(得分:4)

这个剂量工作的原因是,OnCollisionEnter函数只激活碰撞首次发生的帧,而GetKeyDown只激活按钮被推动的单帧。

一个非常难看的修复方法是将GetKeyDown替换为GetKey,然后在走进门时已占据空间。

更好的解决方案是为Update循环中的if语句添加变量。在用户输入时激活,在用户离开碰撞区域时停用。

然后制作一个这样的if语句:

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

此外,任何人都可以正确格式化吗? (我在电话上)

编辑:碰撞意味着触发!遗憾!