【问题标题】:Why can't I detect keypress while player is on top of chest为什么当玩家在胸部时我无法检测到按键
【发布时间】:2019-06-10 23:43:56
【问题描述】:

我正在尝试编写代码,让玩家对箱子上的 OnTriggerEvent2D 做出反应,然后打开箱子库存。我有让箱子在地图上随机生成,并且物品栏位于场景中。

我已尝试将胸部库存移至场景和胸部预制件。 我已将可交互代码添加到胸部预制件中,并在胸部预制件中有胸部库存时将胸部库存作为游戏对象。当库存 UI 位于场景中时,我无法执行此操作。

using UnityEngine;
using UnityEngine.SceneManagement;

public class ChestInteractable : MonoBehaviour
{
    [SerializeField] KeyCode interactableKey = KeyCode.E; //allow player to choose key

    public GameObject chestInventoryUI;

    private void OnTriggerEnter2D(Collider2D collision) //if player collides with chest (I am unsure if OnCollisionEnter2D is better, I am only a beginner)
    {
        if(Input.GetKeyDown(interactableKey)) {
            chestInventoryUI.SetActive(true); //open up chest inventory
            Time.timeScale = 0f; //time is stopped
        }

        if(Input.GetKeyUp(interactableKey))
        {
            chestInventoryUI.SetActive(false); //closes chest inventory
            Time.timeScale = 1f; //time resumes
        }
    }
}

我希望宝箱清单 UI 是可见的,并且游戏会停止,但什么也没发生。

【问题讨论】:

  • 尝试使用void OnTriggerStay2D (Collider2D collision),因为您希望在有重叠的每一帧都调用它。否则,玩家将不得不在重叠开始的确切帧上按下键,这不是你的意思:) 另外我认为在它上面使用 private 可能会搞砸所以只需将它作为 void ...没有访问修饰符
  • 另外请注意,keydown 和 keyup 可能发生在 single 帧期间,尤其是在有延迟的情况下,因此 if(input.GetKeyDown(...))if(Input.GetKeyUp(...)) 块最终都可能是如果关键事件发生在当前帧期间,它们都会返回 true。

标签: c# unity3d


【解决方案1】:

使用OnTriggerStay2D

void OnTriggerStay2D(Collider2D other)
{
    if (Input.GetKeyDown(interactableKey))
    {
        chestInventoryUI.SetActive(true);
        Time.timeScale = 0.0f;
    }

    if (Input.GetKeyUp(interactableKey))
    {
        chestInventoryUI.SetActive(false);
        Time.timeScale = 1.0f;
    }
}

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2012-10-11
    • 2014-12-14
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多