【问题标题】:OnTriggerEnter with user input in UnityOnTriggerEnter 与 Unity 中的用户输入
【发布时间】:2016-10-13 18:00:21
【问题描述】:

我正在尝试在 Unity 中创建一个简单的近战攻击,但我遇到了代码问题。我写了以下内容:

public class meleeAttack : MonoBehaviour
{

    void Start()
    {
    }

    void Update()
    {
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
            print("What's up!!!");
    }


}

这本身就可以正常工作,但是,我想让它只在玩家按下一个键时才会弹出消息。我尝试将以下内容添加到 OnTriggerEnter 方法:

 void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player" && Input.GetKeyUp(KeyCode.F))
            print("What's up!!!");
    }

问题是现在消息将不再显示,即使我按 F 键。有没有一种方法可以合并此代码,以便仅在玩家按下 F 键并与游戏对象接触时调用消息?

【问题讨论】:

    标签: unity3d input collision-detection


    【解决方案1】:

    您需要在更新循环中执行 GetKeyUp 并设置一个布尔标志,然后在 OnTriggerEnter 中检查该标志。

    反之亦然,具体取决于您的时序要求(即在 OnTriggerEnter 中设置布尔标志,并在更新循环中检查它)。 [根据您的描述,我可能会这样做]

    您遇到的问题是 OnTriggerEnter 只会触发一次,因此它不会继续轮询键盘以了解键状态的变化,这就是您需要检查更新循环的原因。

    【讨论】:

      【解决方案2】:

      您可以使用OnTrigggerStay 代替 onTriggerEnter 并且可以避免 Update 事件中的特殊布尔值。

      OnTriggerStay 几乎被每个 Collider other 的所有帧调用 触动扳机

      类似的东西,你需要

       void OnTriggerEnter(Collider other)
          {
              if (other.gameObject.tag == "Player" && Input.GetKeyUp(KeyCode.F))
                  print("What's up!!!");
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-23
        • 1970-01-01
        相关资源
        最近更新 更多