我正在创建一个 2D Unity 游戏,但我遇到了一个让我感到困惑的问题,我似乎无法找到如何获取上下文的键“E”的输入我正在尝试制作一个系统,当玩家站在商店上方按“E” 他们进入商店可以买东西
(第一个 if 语句是将商店更改为突出显示的颜色以使其清晰,所以忽略它,ShopSR 只是商店精灵渲染器的变量,也是现在而不是能够进入我刚刚使用的商店打印为占位符)
代码:
private void OnTriggerEnter2D(Collider2D other)
{
if(other.CompareTag("Shop"))
{
ShopSR.sprite = ShopHighlighted;
}
if (other.CompareTag("Shop") && Input.GetKeyDown(KeyCode.E))
{
print("ENTER SHOP");
}
}
进入扳机时,您将无法以闪电般的速度按下E键,当然您可以通过某种方式设法按下它,但这对于硬核玩家来说是最有可能的。如果你想使用输入,那么你需要每帧更新它:
//Called one frame when the trigger is entered
private void OnTriggerEnter2D(Collider2D other)
{
if(other.CompareTag("Shop"))
{
ShopSR.sprite = ShopHighlighted;
}
}
//Called every time an object is in a trigger
private void OnTriggerStay2D(Collider2D other)
{
if (other.CompareTag("Shop") && Input.GetKeyDown(KeyCode.E))
{
print("ENTER SHOP");
}
}
你可以这样做:
bool isOnShop;
void Update(){
if(Input.GetKeyDown(KeyCode.E) && isOnShop)
// User is on shop, do your code
}
private void OnTriggerEnter2D(Collider2D other)
{
if(other.CompareTag("Shop"))
{
ShopSR.sprite = ShopHighlighted;
isOnShop = true;
}
}
private void OnTriggerExit2D(Collider2D other){
isOnShop = false;
}
或者按照上面的建议使用 OnTriggerStay2D