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

Unity中GetKeyDown始终返回true引发栈溢出问题咨询

问题核心原因

Unity 的输入状态是每帧开始前统一采样更新一次,在单帧的整个生命周期内,所有输入相关API的返回值都不会发生变化:

  • GetKeyDown(KeyCode.P) 仅会在P键被按下的首帧返回true,在这一帧结束、下一帧的输入采样完成前,你调用任意次数该API都会固定返回true,不会中途刷新状态。

你的递归逻辑完全运行在按下P键的同一帧内,并没有推进到下一帧刷新输入状态,因此每次递归调用PlayerInputHandler.TestPInput()拿到的返回值永远是true,会无限触发递归调用,最终导致调用栈溢出。

修复方案

你不需要在输入触发的逻辑中递归调用输入处理方法,Update本身就会每帧自动调用一次HandleTestInput(),直接删掉递归调用行即可:

void HandleTestInput()
{
    if (PlayerInputHandler.TestPInput())
    {
        Debug.Log("Pressed p");
        // 删掉这行递归调用即可:HandleTestInput();
    }
}

如果你的业务逻辑需要连续触发,应该通过帧循环逐帧判断输入,不要用递归处理输入检测逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:05