You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OnTriggerEnter中添加Input.GetKey遇到的功能触发问题

问题原因

OnTriggerEnter只会在玩家刚进入触发器的那一帧执行一次,玩家几乎不可能刚好在这一瞬间按下Z键,所以你的输入检测逻辑根本没机会触发。移除Input代码后,只要进入触发器就执行射线和协程,自然能正常运行。

解决方案
  • 先声明一个布尔变量跟踪触发器状态:
private bool isPlayerInTrigger = false;
  • 在触发器事件里更新这个状态:
void OnTriggerEnter(Collider col)
{
    if (col.gameObject.tag == "Object")
    {
        isPlayerInTrigger = true;
    }
}

void OnTriggerExit(Collider col)
{
    if (col.gameObject.tag == "Object")
    {
        isPlayerInTrigger = false;
    }
}
  • 在Update里统一检测输入、触发器状态和射线:
void Update()
{
    // 用GetKeyDown确保只触发一次,避免按住Z键重复启动协程
    if (isPlayerInTrigger && Input.GetKeyDown(KeyCode.Z))
    {
        if (Physics.Raycast(transform.position, transform.forward, 2f))
        {
            Debug.Log("Raycast detected.");
            StartCoroutine(Collide(solidObject));
        }
    }
}
额外注意点
  • 确认玩家对象的标签确实是"Object",别打错字
  • 射线检测如果需要忽略某些层,可以给Physics.Raycast加层掩码参数,避免误判
  • 检查Input设置里Z键是否被正确映射,没有和其他功能冲突

内容的提问来源于stack exchange,提问作者Wurdular

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:55:00