Unity开发:如何阻止玩家重复按E键与宝箱交互刷分?
解决方案
核心思路是给宝箱加一个已领取标记,避免重复触发积分奖励,同时保留宝箱对象:
- 在脚本里新增布尔变量,标记宝箱是否已被领取:
private bool isLooted = false; // 默认未领取
- 修改
OnTriggerStay2D方法,加入标记判断,同时修正语法错误、优化按键触发逻辑(Input.GetKeyDown仅在按键按下第一帧触发,避免按住E持续触发):
private void OnTriggerStay2D(Collider2D collision) { // 仅在玩家触发、未领取过、E键按下瞬间执行 if(collision.gameObject.CompareTag("Player") && Input.GetKeyDown(KeyCode.E) && !isLooted) { anim.SetBool("opening", true); coins += 1; coinsText.text = "Coins: " + coins; Coin.SetActive(true); Destroy(textBox, .2f); getCoin = true; // 标记为已领取,阻止重复获取 isLooted = true; } }
- 若后续需要重置宝箱可领取状态(比如关卡刷新),只需将
isLooted设回false即可,无需销毁或禁用宝箱对象。
内容的提问来源于stack exchange,提问作者user3214197
相关产品推荐
相关产品推荐

