Unity中首次调用SelectGravity()函数重复执行问题求助
Unity首次调用SelectGravity()重复执行2-3次的问题解决
问题分析
你遇到的核心问题是输入检测逻辑依赖了轴的持续状态,而非单次按键按下事件。Input.GetAxisRaw("RotatoWorld")在按键按住的每帧都会返回非零值,首次运行时可能因为输入设备初始状态或脚本执行顺序的微小异常,导致连续多帧触发判断逻辑,进而重复调用SelectGravity()。后续运行正常是因为旋转协程启动后,IsRotating被设为true,阻止了后续触发,但首次初始化阶段的输入状态稳定性不足,引发了重复执行。
解决方案
方案1:改用单次按键按下检测(推荐)
放弃依赖Input.GetAxisRaw的持续值,改用Input.GetKeyDown检测单次按键按下事件,确保只有按键按下的第一帧才触发逻辑:
void Update() { // 根据你的输入轴配置,替换成对应的按键(比如左右箭头/A/D) bool rotateClockwise = Input.GetKeyDown(KeyCode.RightArrow); bool rotateCounterClockwise = Input.GetKeyDown(KeyCode.LeftArrow); if ((rotateClockwise || rotateCounterClockwise) && !IsRotating) { IsRotating = true; // 给Rotation赋值,供协程判断旋转方向 Rotation = rotateClockwise ? 1 : -1; SelectGravity(); } Physics2D.gravity = new Vector2(XGravity, YGravity); }
方案2:触发后立即重置输入值
如果坚持使用Input.GetAxisRaw,在触发逻辑后立即重置Rotation的值,避免后续帧检测到非零值:
void Update() { Rotation = Input.GetAxisRaw("RotatoWorld"); if (Rotation != 0 && !IsRotating) { IsRotating = true; Rotation = 0; // 重置输入值,防止后续帧重复触发 SelectGravity(); } Physics2D.gravity = new Vector2(XGravity, YGravity); }
方案3:确认脚本执行顺序
确保ChangeGravity脚本的初始化逻辑先于Update执行:
- 打开
Edit -> Project Settings -> Script Execution Order - 将
ChangeGravity脚本添加到列表中,调整顺序到默认组之前,保证Start里的IsRotating = false初始化先完成
方案4:排查SelectGravity()内部逻辑
确认SelectGravity()函数中没有意外修改IsRotating的值,也没有调用任何会重置该变量的代码。
内容的提问来源于stack exchange,提问作者traponsix
相关产品推荐
相关产品推荐

