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
相关产品推荐
相关产品推荐

