C#倒计时计时器失效问题:为何我的计时器无法正常工作?
问题分析与解决
你的代码核心问题有两个,直接导致程序无反应:
- do-while循环的致命逻辑错误:Update方法是游戏每帧都会调用的函数,你写的
do { timer--; } while (timer > 0);会在单帧内一次性把timer从10减到-1,循环结束后timer已经是-1,根本触发不了后面if (timer == 0)的判断。而且之后每帧都会执行这个循环,timer会一直往负数走,永远满足不了等于0的条件。 - 可能的位置同步缺失:就算你把timer直接设为0触发了
object1X--;,如果没有把object1X的值同步到物体的实际位置(比如transform.position = new Vector3(object1X, transform.position.y, transform.position.z);),物体也不会有移动表现。
修正后的代码示例
帧计数计时(每帧减1,10帧后移动)
private int timer = 10; void Update() { if (timer > 0) { timer--; } else if (timer == 0) { object1X--; // 将变量同步到物体实际位置,根据你的场景调整参数 transform.position = new Vector3(object1X, transform.position.y, transform.position.z); // 设为-1避免每帧重复触发移动 timer = -1; } }
真实时间计时(10秒后移动,更符合常规需求)
private float timer = 10f; void Update() { timer -= Time.deltaTime; if (timer <= 0f) { object1X--; transform.position = new Vector3(object1X, transform.position.y, transform.position.z); // 关闭当前脚本的Update逻辑,避免重复执行 enabled = false; } }
内容的提问来源于stack exchange,提问作者Tiny Designs
相关产品推荐
相关产品推荐

