我试图在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联系时才调用该消息?
答案 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!!!");
}