Unity安卓端协程运行缓慢 Cookie点击器游戏数值更新异常问题
问题根源
你当前的实现逻辑存在核心错误,安卓端运行速度慢本质是和帧率绑定导致的:
- 你将
StartCoroutine(Rps())放在了Update生命周期中,每帧都会启动一个全新的协程,最终每秒累加的饼干总数完全等于每秒运行的协程数量,PC端帧率高、启动协程多,所以速度正常,安卓端帧率低、启动协程少,自然累加变慢。 - 协程内
WaitForSeconds(Time.deltaTime * 0.1f)的写法完全不可控,Time.deltaTime是上一帧的时长,每帧数值都不固定,无法实现稳定的等待间隔。
最优解决方案(推荐)
直接在Update中按时间增量计算饼干产量,完全和帧率解绑,安卓和PC端运行效果100%一致,且支持每帧更新视觉表现,符合你要的快速更新效果:
- 先在你的
Stats类中新增一个浮点型累计变量,用来存未取整的饼干数:
// 加入Stats类中 public static float CookiesTotalAccumulate;
- 修改
Update逻辑,删掉每帧启动协程的代码:
private void Update() { // 按当前帧的时间增量累加对应比例的饼干产量 Stats.CookiesTotalAccumulate += Stats.cookiesPerSecond * Time.deltaTime; // 取整赋值给总计数,保证显示的是整数 Stats.CookiesTotal = Mathf.FloorToInt(Stats.CookiesTotalAccumulate); openSlot(price1text, price1, slot1); openSlot(price2text, price2, slot2); openSlot(price3text, price3, slot3); }
备选方案(协程实现)
如果一定要用协程实现,只需要在Start中启动一次协程即可,不要放在Update中重复启动:
private void Start() { StartCoroutine(Rps()); } IEnumerator Rps() { // 循环执行累加,固定每0.1秒更新一次 while(true) { Stats.CookiesTotal += Stats.cookiesPerSecond * 0.1f; yield return new WaitForSeconds(0.1f); } }
补充说明
你之前把等待时长改为1秒时表现正常属于巧合:1秒的等待时间远大于帧间隔,不管帧率高低,每秒每个协程只会执行1次累加,大量协程的累加量刚好凑到了预期的每秒产量,但逻辑本身仍然是错误的,设备帧率波动时依旧会出现数值异常。
内容的提问来源于stack exchange,提问作者Flacuchentxox
相关产品推荐
相关产品推荐

