在Unity中使用用户输入的OnTriggerEnter

时间:2016-10-12 02:12:12

标签: unity3d input collision-detection

我试图在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键并与gameObject联系时才调用该消息?

2 个答案:

答案 0 :(得分:1)

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

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

你遇到的问题是OnTriggerEnter只会触发一次,因此它不会继续轮询键盘以查看键状态的变化,这就是你需要在Update循环中进行检查的原因。

答案 1 :(得分:0)

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

  

OnTriggerStay几乎被称为每个Collider other的所有帧   触及触发器

类似的东西,你需要

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