我正在尝试从“空格”按钮获取输入,但看起来我点击时不接受输入。这是我的代码:
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”的输入管理器中,但它也不起作用...
答案 0 :(得分:4)
这个剂量工作的原因是,OnCollisionEnter函数只激活碰撞首次发生的帧,而GetKeyDown只激活按钮被推动的单帧。
一个非常难看的修复方法是将GetKeyDown替换为GetKey,然后在走进门时已占据空间。
更好的解决方案是为Update循环中的if语句添加变量。在用户输入时激活,在用户离开碰撞区域时停用。
然后制作一个这样的if语句:
if(inCollider && Input.GetKeyDown(KeyCode.Space)){
//Open door here
}
此外,任何人都可以正确格式化吗? (我在电话上)
编辑:碰撞意味着触发!遗憾!